1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import * as escodegen from 'escodegen';
- import * as estraverse from 'estraverse';
- import { NodeObfuscator } from './NodeObfuscator'
- export class MemberExpressionObfuscator extends NodeObfuscator {
- /**
- * @param memberExpressionNode
- */
- public obfuscateNode (memberExpressionNode: any): void {
- estraverse.replace(memberExpressionNode.property, {
- leave: (node, parentNode) => {
- switch (node.type) {
- case 'Literal':
- this.literalNodeController(node);
- break;
- case 'Identifier':
- if (memberExpressionNode.computed) {
- break;
- }
- memberExpressionNode.computed = true;
- this.identifierNodeController(node);
- break;
- }
- }
- });
- }
- /**
- * replaces:
- * object.identifier = 1;
- *
- * by:
- * object[_0x23d45[25]] = 1;
- *
- * and skip:
- * object[identifier] = 1;
- *
- * @param node
- */
- private identifierNodeController (node: any): void {
- let nodeValue: string = node['name'];
- node['type'] = 'Literal';
- node['value'] = nodeValue;
- node['raw'] = `'${nodeValue}'`;
- node['x-verbatim-property'] = {
- content : this.replaceLiteralStringByArrayElement(nodeValue),
- precedence: escodegen.Precedence.Primary
- };
- delete node['name'];
- }
- /**
- * replaces:
- * object['literal'] = 1;
- *
- * by:
- * object[_0x23d45[25]] = 1;
- *
- * @param node
- */
- private literalNodeController (node: any): void {
- switch (typeof node.value) {
- case 'string':
- if (node['x-verbatim-property']) {
- break;
- }
- node['x-verbatim-property'] = {
- content : this.replaceLiteralStringByArrayElement(node.value),
- precedence: escodegen.Precedence.Primary
- };
- break;
- }
- }
- }
|