Ming's Blog

Back

Bugku之树木的小秘密Blur image

第一次跟踪#

首先用 OD 打开运行程序,快速定位到输入位置并且在其后打断点,接着输入。

输入

回车后暂停程序以找到处理数据位置,但是跟踪下去并没有线索。

重新跟踪下发现程序生成了一个新线程来处理输入数据:

新线程

附加新线程#

于是再开一个 OD attach 该线程,查看栈空间:

新线程栈空间

在这些返回点各下一个断点,然后在输入窗口输入并回车。

输入

发现程序断点触发,并且此时寄存器数据如下:

regdata

出现了输入的字符串,跳转到到对应的内存空间。

内存空间

接下来的思路很明确了:对该地址下读断点,每当该地址被读取就会触发,再从对应位置开始分析代码即可。

跟踪发现以下代码:

eof检查

这里是对输入 EOF 进行检查,如果把 jne 改为 nop,就会触发错误:

报错

解包程序#

到这里已经很明显了,这是一个 PyInstaller 打包的 Python 程序。我当时尝试到这里时没管这个信息,选择不改 jne 正常跟踪下去,然后是一段很长很长的跟踪…没有结果。

最后还是用 PyInstaller 解包,得到如下文件:

解包

打开之前出现过的 123 文件,里面是一段 base64 编码:

解密1

在线解密得到:

解密2

结束。

做逆向方向还是挺重要的,之前没意识到是 PyInstaller 打包程序,浪费了很多时间…

Bugku之树木的小秘密
https://astro-pure.js.org/blog/bugku-tree
Author Ming
Published at February 19, 2024
Comment seems to stuck. Try to refresh?✨