运行之后输入key然后就是程序长时间的卡死,然后过了很久才告诉我结果。
本来第一反应是里面用了高强度的虚拟机,结果进去每一步都挺清楚的,没有加密或者混淆的地方。唯二需要注意的地方就是代码的空间量很大,而且基本都是rwx权限。
然后跟踪没多久就jmp eax跳转了,然后。。。除了没有输入,基本就是一个循环。。
整个流程不调用api,数据/代码在空间内来回跳,实在不好下断点。
基本猜测作者是写了一个自解密函数,然后又写了个加密变形函数把这个函数来回加密变形,最后造了个pe结构套上去。
只好注入一个dll接管exe的执行流程,把每一步的call eax就hook下来,接管跑完之后发现居然有2880次解密操作。
然后再分析数据的变化过程,本来以为只有最后一层的代码有用,结果,跑完之后发现所谓的核心代码居然不完整。
回头发现原来每一层里其实都有或多或少的几句汇编代码,虽然不一定有完整功能,但是可以和其他层的连上。
那就修改dll开始抠代码,中间加载了od的反汇编库来计算指令长度,然后去掉中间的各种跳转指令,最后把完整的函数的二进制字节码保存成了文件,居然达到了37k之大。
本来以为这个题目最难的地方已经过去了,没想到对于不懂密码的我来说,噩梦刚刚开始。
ida打开这个文件就卡死了,反编译成解密函数更是用了半小时,好在用vs编译起来就快多了,而且运行结果也完全正确。
但是刚看了函数的前5行就看不懂了,看了前10行就蒙了,看了前20行直接就想摔键盘了。
*(p_ebp - 1) = p_esi[439] ^ p_esi[423];
*(p_ebp - 2) = p_esi[442] ^ p_esi[426];
v2 = p_esi[421] ^ p_esi[437];
v3 = p_esi[441] ^ p_esi[425];
v4 = (unsigned__int8)p_esi[433];
*(p_ebp - 3) = p_esi[404] ^ p_esi[(unsigned__int8)p_esi[420] ^ (unsigned__int8)p_esi[436] ^ 9];
v5 = p_esi[405] ^ p_esi[(unsigned__int8)p_esi[417] ^ v4 ^ 9];
v6 = (unsigned__int8)p_esi[430];
*(p_ebp - 4) = v5;
v7 = p_esi[406] ^ p_esi[(unsigned__int8)p_esi[446] ^ v6 ^ 9];
v8 = (unsigned__int8)p_esi[427];
*(p_ebp - 5) = v7;
v9 = p_esi[407] ^ p_esi[(unsigned__int8)p_esi[443] ^ v8 ^ 9];
v10 = (unsigned__int8)p_esi[424];
*(p_ebp - 6) = v9;
v11 = p_esi[408] ^ p_esi[(unsigned__int8)p_esi[440] ^ v10 ^ 9];
v12 = (unsigned__int8)p_esi[434];
*(p_ebp - 7) = v11;
v13 = v2 ^ 9;
v14 = *((_DWORD *)p_esi + 107);
*(p_ebp - 8) = p_esi[409] ^ p_esi[v13];
LOBYTE(v13) = p_esi[410] ^ p_esi[(unsigned__int8)p_esi[418] ^ v12 ^ 9];
这是谁?这在哪?这在干什么?
我只能往我已知的几种密码算法上靠。下载了几种常见的密码算法比对了一下,发现和aes的结构最像,都有个类似的置换表,虽然内容和结果都对不上,代码形式上面更是差了10万八千里,只有输出结果在输入相同的字符时表现出奇怪的4字节循环。(此处花费1天半)
只能死马当成活马医了。我觉得我下面的举动成为了能做出这道题的关键,那就是删。看不顺眼的,对不上的,全删了。置换表、密码表全清了,代码里莫名其名会跑出非0的地方变化,也都删的干干净净,总之最后的结果,就是让这4字节循环相同。(此处花费1天)
在让aes和目标代码跑出相同结果之后,我才真正感受到了希望,然后就是各种添加。首先添加相同的置换表,输出相同,然后设置秘钥长度,设置加密轮次相同,最后添加秘钥的时候失败了很久,只要密钥清空就是对的,一加上密钥就是错误。后面才发现虽然aes虽然是对称密码,但是加解密函数操作是不同的,于是我测试了解密函数,这才和目标函数对应上。最后一步就是添加上目标函数里那些奇怪的异或和加减法,成功的实现了一个自定义的aes函数。
然后把KCFT的二进制用这个自定义的aes解密,就得到了KEY。
[培训]《安卓高级研修班》彻底搞定函数抽取型壳!现在报名得源码和安卓8.1脱壳机!10月20日深圳专场不见不散!
最后于 11小时前 被xym编辑 ,原因: