首页
论坛
课程
招聘
[原创]KCTF2020Q1参赛题目:寻踪觅源 by lelfei
2020-4-16 09:11 3578

[原创]KCTF2020Q1参赛题目:寻踪觅源 by lelfei

2020-4-16 09:11
3578
寻踪觅源
预设用户名:
KCTF
预设SN:
40017535dad01714402635730122
设计说明:
发现一个Fabrice Bellard大牛写的开源js引擎quickjs,想学习一下源码,自己动手编译了一个WIN版本,发现可以直接把js脚本编译成EXE,并且生成的文件大小不到1M,用js写crackme是一个多么有意思的事!于是就有了这个CM,也帮大牛推广一下quickjs。膜拜作者Fabrice Bellard,知名开源项目FFMPEG和QEMU都出自他手,项目地址:https://bellard.org/quickjs/ 。
CM设计思路很简单,详见src.js。编译过程比较麻烦,需要先修改Makefile启用win编译环境支持,用MSYS编译出编译引擎,再修改qjsc.c源码启用win下把js编译成exe的功能,用qjsc.exe从js脚本生成C文件,最后用gcc编译出crackme.exe。修改过的Makefile和qjsc.c也提供了,可以对比原始文件看看改动的位置。
编译qjsc.exe命令:运行msys中的mingw32.exe并切换到工作目录,运行mingw32-make
使用qjsc.exe编译js文件:在msys环境中运行:./qjsc -fno-date -fno-eval -fno-string-normalize -fno-regexp -fno-json -fno-proxy -fno-map -fno-typedarray -fno-promise -o crackme src.js
修改C源码文件后重新编译命令:gcc -O2 -flto -D _GNU_SOURCE -I . -o crackme out9492.c ./libquickjs.lto.a -lm -static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic
破解建议:
想要分析出quickjs引擎的运行原理难度太大,应该比一般的VM引擎还要复杂,不过CM中并没有抹除quickjs的相关信息,敏感的人应该很快发现关键字,然后上网搜索到quickjs源码,从源码中分析出字节码的定义,反编译出js脚本,然后就简单了。目前这个项目还比较小众,估计没有现成的反编译工具,不过有源码参考,自己动手吧。
文件说明:
KCTF2020Q1_by_lelfei.rar 参赛文件

源码文件:
quickjs-2020-01-19.tar.xz 官方源码
Makefile 修改后的Makefile文件,可以在win下用gcc编译
qjsc.c 修改后的qjsc.c,可以在win下把js编译成exe
src.js js脚本源码
out9492.c 包含js字节码的参赛文件源码
kctf2020q1.py js脚本的python实现以及keygen
CM设计说明.txt 本说明文件


看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

最后于 2020-4-19 16:28 被kanxue编辑 ,原因:
上传的附件:
收藏
点赞3
打赏
分享
最新回复 (8)
雪    币: 5711
活跃值: 活跃值 (953)
能力值: ( LV15,RANK:1431 )
在线值:
发帖
回帖
粉丝
lelfei 活跃值 23 2020-4-17 16:12
2
0
修复由于进制转换时没有过滤导致存在多解
最后于 2020-4-17 16:24 被lelfei编辑 ,原因:
上传的附件:
雪    币: 3982
活跃值: 活跃值 (867)
能力值: ( LV12,RANK:279 )
在线值:
发帖
回帖
粉丝
htg 活跃值 3 2020-4-20 17:44
3
0
替换Makefile文件后,在quickjs当前目录执行 mingw32-make,出现错误
process_begin: CreateProcess(NULL, uname -s, ...) failed.
process_begin: CreateProcess(NULL, cat VERSION, ...) failed.
mkdir -p .obj .obj/examples .obj/tests
命令语法不正确。
Makefile:177: recipe for target '.obj' failed
mingw32-make: *** [.obj] Error 1
这样如何解决?
雪    币: 3982
活跃值: 活跃值 (867)
能力值: ( LV12,RANK:279 )
在线值:
发帖
回帖
粉丝
htg 活跃值 3 2020-4-20 17:48
4
0
process_begin: CreateProcess(NULL, uname -s, ...) failed.
对应的是应该是 
ifeq ($(shell uname -s),Darwin)
CONFIG_DARWIN=y
endif
难道无法执行 $(shell uname -s)
雪    币: 3982
活跃值: 活跃值 (867)
能力值: ( LV12,RANK:279 )
在线值:
发帖
回帖
粉丝
htg 活跃值 3 2020-4-20 17:49
5
0
process_begin: CreateProcess(NULL, cat VERSION, ...) failed.
对应的是 
endif
DEFINES:=-D_GNU_SOURCE -DCONFIG_VERSION=\"$(shell cat VERSION)\"
ifdef CONFIG_BIGNUM
难道无法执行 shell语句
雪    币: 3982
活跃值: 活跃值 (867)
能力值: ( LV12,RANK:279 )
在线值:
发帖
回帖
粉丝
htg 活跃值 3 2020-4-20 17:50
6
0
mkdir -p .obj .obj/examples .obj/tests
对应的是:
$(OBJDIR):
       mkdir -p $(OBJDIR) $(OBJDIR)/examples $(OBJDIR)/tests
这条语句也无法执行?
雪    币: 5711
活跃值: 活跃值 (953)
能力值: ( LV15,RANK:1431 )
在线值:
发帖
回帖
粉丝
lelfei 活跃值 23 2020-4-20 18:35
7
0
htg mkdir -p .obj .obj/examples .obj/tests 对应的是: $(OBJDIR): mkdir -p $(OBJDIR) $(OBJDIR)/examples $( ...
要在msys环境下,在cmd里直接运行mingw32-makde会报错的
雪    币: 2814
活跃值: 活跃值 (1887)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 活跃值 4 2020-11-16 16:14
8
0
请问一个问题。就是 qjsc 把js处理成字节码以后的bin。可以完整还原成js吗?
雪    币: 5711
活跃值: 活跃值 (953)
能力值: ( LV15,RANK:1431 )
在线值:
发帖
回帖
粉丝
lelfei 活跃值 23 2020-11-17 12:16
9
0
IamHuskar 请问一个问题。就是 qjsc 把js处理成字节码以后的bin。可以完整还原成js吗?
基本能还原吧,变量名都没改
游客
登录 | 注册 方可回帖
返回