首页
社区
课程
招聘
[原创]第三题 寻踪觅源
发表于: 2020-4-18 11:10 4187

[原创]第三题 寻踪觅源

2020-4-18 11:10
4187

lelfei_fix.exe 拖进 IDA 里看一下字符串,可以确定这个题和 quickjs 有关。是 qjsc 编译一个 .js 的输出。

下载了最新的 2020-04-12 版本,自己编译一个 quickjs, 然后用 qjsc 编译 examples/hello.js, qjsc -e -o hello.c examples/hello.js,可以得到 hello.c。

在 hello.c 里面可以看到 .js 编译出的字节码 qjsc_hello。然后在 exe 文件中寻找字节码,根据前缀 qjsc_ 很容以找到 _qjsc_s,可以判断其长度 988,内容如下。并且主程序将输入的 name 和 sn 拷贝到 &_qjsc_s[23] 和 &_qjsc_s[40],然后这道题和原 exe 文件就没有关系了。

将 hello.c 文件中的字节码和长度替换为 _qjsc_s,988,并 使用 gcc -D _GNU_SOURCE -I . -o hello hello.c ./libquickjs.a -lm -ldl 编译后运行,结果崩溃了 Segmentation fault (core dumped),这就很尴尬了。折腾了一番发现不同版本的 quickjs 编译出的字节码并不相同,然后从一个一个版本往前试,2020-03-16 版本还是崩溃,2020-01-19 版就好了。

能够正确执行字节码之后,可以修改 quickjs.c 文件,将所有执行的字节码打印出来,结合 quickjs-opcode.h 文件,可以得到字节码和定义。

又折腾了 一番发现,里面关键的 opcode 只有 add, sub, mul, div, mod, xor, sar。将这些字节码的参数和结果打印出来,基本就可以确定运算过程了,这个过程依旧很麻烦。

正向过程如下

逆过程如下

sn 为 40017535dad01714402635730122


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-4-18 11:14 被iweizime编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//