HCTF2018逆向LuckyStar分析
这次运气好,没想到能做出来。这个exe写的有点不稳定,调着很容易崩,在win10平台下很难受,是win7下搞出来的。拿到题看是exe,老套路先查壳。
发现没有壳,扔到ida里查字符串,有可疑字符串,但是找不到引用,又浏览了一边ida分析出来的函数们,没有发现关键代码,怀疑是对关键代码加密了。
发现有个函数叫TlsCallback,百度了一下,当进程被创建和销毁时会先执行它。
关键代码加密了只能解完密再分析,扔到OD里耍一下。发现断在了TlsCallback这里,研究一下。
发现函数里面调用了多个反调试的函数以及一个检测调试器的循环,之前在网上看到有大佬通过修改PE文件里Tls的起始地址和结束地址为0,让程序不执行Tls回调,从而绕过反调。
试了一下,成功干掉Tls回调,继续调程序发现无论怎么调都没发现关键代码。回头分析了下,原来解密关键代码的循环也写在Tls回调函数里。
没想到太好的解决办法,我是通过直接把反调试部分代码全部nop掉绕过的。
然后F8一直退出Tls回调函数,发现程序在动态调用一个函数表里的函数,加载了一大堆的库函数。(我想,这就是为什么程序不稳定。调这个程序真的要人品。)
接着在调用函数那里下个断,一直F9,直到在寄存器窗口再次看到我们熟悉的luckystar部分,F7进去上下看了下,哈哈,发现关键代码已经解密出来了。
再输入部分下个断,然后F9。(吐槽一下,每次输入之前它都要放一首歌才能输入,那歌真的是又长又难听。有兴趣的听一下。)
接着它对输入的key进行加密,先是一个base64(注意它把表的大小写倒过来了),然后是个两层循环去随机数的加密。
因为之前在Tls回调哪里使用了srand(0x616161),所以随机数的生成是固定的,从内存中独处32组随机数。
最好它会从两段空间中取出要匹配的密文key(每段都是16个字节,一共32个字节),和我们输入的进行循环匹配。
这里贴出我的脚本,本人python菜如狗所以用C写的。
可能有些地方理解不到位,请过路大佬勿喷。 本帖最后由 whklhh 于 2018-11-14 12:42 编辑
0x指纹 发表于 2018-11-13 23:46
请问大佬,在输入flag之前有一个函数的自解密,然后输入后会call 4015E0调用这个函数,请问4015E0内是什 ...
4015E0是核心调用函数,自解密错误是因为另外一个地方还有个反调,被check到了会把种子改掉
那个反调楼主没有提到,估计是因为OD的反调插件自动过了所以没有发现把
第二个SMC,也就是4015E0处的解密是重新用了一个种子的 师傅,有环境吗? 师傅太强了 用吾爱的虚拟机就好 不明觉厉 脚本结果最后进行base64解密 谢谢分享,学习了~ 这个软件是做什么用的?能实现什么作用? 师傅就是厉害👍厉害👍 666,辛苦了!