GithubHelp home page GithubHelp logo

ast_tools's Introduction

ast_tools JS AST还原框架

简介

ast_tools框架,是我从esprima转向babel后重新开发的一套JS AST还原框架,已经内置了一些常见的混淆还原策略,代码可能略有凌乱。

为什么开源

因为我怕我开源ocr久了别人以为ocr是我的专业,实际是ocr仅仅是我的副业。

另外我个人的力量是有限的,javascript的语法糖以及各种奇怪的写法太多了,所以难免会有Bug以及没覆盖到的算法形式,希望这个项目能成为一个公共的平台,欢迎各种pr,每周末我会定期review各位的pr

使用方式

  • 安装nodejs
  • 安装依赖
cd ast_tools
npm install
  • 下载测试代码并将测试js代码放在demos/demo1文件夹中
  • 运行
node main.js

其他文档后面慢慢补

声明

本项目仅作ast算法策略演示以及节点合并算法研究记录,本项目不针对任何加密做破解等处理,只为学习AST技术。

本项目仅作学习研究之用,下载学习后限24小时内删除,不可用于破解(本身也不包含破解功能),如使用本工具造成任何法律后果,由使用者承担。

为防止法律风险已将测试代码删除,测试代码可从网盘下载 https://wwc.lanzoum.com/i1Mmq01brwsf

友情推荐

ddddocr

captcha_trainer

feapder

crawlab

交流群 (加我好友拉你进群)

Test

ast_tools's People

Contributors

sml2h3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ast_tools's Issues

逗号表达式处理 else for 语法时候取不到body bug

_body.splice(_body.indexOf(_node), 0, seqs[ids])

这段代码在处理逗号表达式的时候,如果碰到 else for 这种写法 由于else 的内容没有用大括号包裹, 会导致在拿for的父对象的body 插 AssignmentExpression 的时候 取不到 body 导致报错, 感觉应该对所有的 else 都先对 alternate 检查 如果 不是 BlockStatement
都加上一个BlockStatement 包裹住
下面为测试代码
if (void 0 !== e[r(n(1163, 1110))]) { u = r(""); } else for (var f = [r("ESEAPx0Y"), r(n(1230, 1247)), r("Czc"), r("CQ")], v = 0; v < f[r(n(1346, 1251))]; v++) { if (void 0 !== e[f[v] + r("Li0GMBEC")]) { u = f[v]; break; } }

TypeError: Cannot read properties of null (reading 'left')

大佬您好,ast_tools 似乎对某里的 !226 脚本无法进行还原,出现如下错误:

PS C:\Users\Henry\ast_tools> node .\main.js   
发现存在控制流混淆的代码片段
C:\Users\Henry\ast_tools\libs\demo1\ControlFlowFix.js:48
            let args = types.isIdentifier(first_line.declarations[0].init.left) ? first_line.declarations[0].init.left : types.isIdentifier(first_line.declarations[0].init.right) ? first_line.declarations[0].init.right : null;
                                                                          ^

TypeError: Cannot read properties of null (reading 'left')
    at fix (C:\Users\Henry\ast_tools\libs\demo1\ControlFlowFix.js:48:75)
    at ForStatement (C:\Users\Henry\ast_tools\libs\demo1\ControlFlowFix.js:15:9)
    at NodePath._call (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\path\context.js:46:20)
    at NodePath.call (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\path\context.js:36:17)
    at NodePath.visit (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\path\context.js:82:31)
    at TraversalContext.visitQueue (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\context.js:86:16)
    at TraversalContext.visitMultiple (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\context.js:61:17)
    at TraversalContext.visit (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\context.js:107:19)
    at traverseNode (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\traverse-node.js:18:17)
    at NodePath.visit (C:\Users\Henry\ast_tools\node_modules\@babel\traverse\lib\path\context.js:88:52)

Node.js v18.13.0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.