大家好,我是刚学会破解的菜鸟,最近我遇到了1个保密性很好的软件,我弄了几天都没找到
关键跳,在这里想请前辈们指导指导,谢谢:)
详细情况是这样的:
1。这个软件的壳用peid查不出来,我手动脱壳并简单修复后,可以运行,但是如果首先就去
注册,提示注册失败的时候,信息会变成乱码。必须要先存盘或者用了其他需要注册认可的
功能出现正常的“未注册”英文提示后,再去注册窗口输错码注册注册失败提示才是正常字
符!这个暂时不影响主要功能我也不知道错误原因,所以就没管。
2。我用w32dasm打开反编译后,在字符串信息里找不到注册失败那句英文提示,连成功注册
的提示也没发现。我想到在内存查看,就打开winhex,然后选择打开了虚拟内存,单独打开
了这个脱壳文件的内存段(这个脱壳程序在运行中并且已经注册失败1次)。我搜索字符串找
到了错误提示的位置,然后我就把这个脱壳程序的内存段全部复制写入了1个新文件中,我又
用w32dasm打开这个新文件进行反编译,然后找到了错误提示的代码位置,但是注意字符串信
息里仍然没有成功注册的英文句子。我顺着这个错误提示位置的代码往上查看,限于水平没
找到关键call 和关键跳,我用od载入脱壳后的文件(内存直接复制下来的新文件只能看不能
运行,运行要报错)然后通过在w32dasm上错误信息代码的偏移位置,在od里同样的偏移位置
找到了注册失败信息代码,我在这里设断点,然后运行这个程序,注册后被拦截在提示以前
,此时代码如下:
004428D0 813D 0C4E5200 1>cmp dword ptr ds:[524E0C],75BCD15
004428DA 56 push esi
004428DB 8B7424 08 mov esi,dword ptr ss:[esp+8]
004428DF 6A 00 push 0
004428E1 68 804F5200 push 新3.00524F80 ; ASCII "Info"
004428E6 75 07 jnz short 新3.004428EF
004428E8 68 904F5200 push 新3.00524F90 ; ASCII "The product is
registered! "
004428ED EB 05 jmp short 新3.004428F4
004428EF 68 584F5200 push 新3.00524F58 ; ASCII "the product is not
registered!"
004428F4 56 push esi
004428F5 FF15 E4825000 call dword ptr ds:[<&USER32.MessageBoxA>] ;
USER32.MessageBoxA
004428FB 8D4424 08 lea eax,dword ptr ss:[esp+8]
004428FF 50 push eax
00442900 6A 00 push 0
00442902 56 push esi
00442903 68 B0284400 push 新3.004428B0
00442908 6A 00 push 0
0044290A 6A 00 push 0
0044290C FF15 D4815000 call dword ptr ds:[<&kernel32.CreateThread>>;
kernel32.CreateThread
它是判断以后选择性的把提示内容压栈,和网上找到的破解例子都不同,后面又都是用同1个
call来完成显示信息。而且在我贴上的这段代码再往上就是数个int 3 然后是1个ret接着上面代码。
3。我找不到关键跳,就又想了内存查找的方法,在出现注册失败提示的时候不点确定,用
winhex打开这个脱壳文件的整个内存段,然后查找我输的错误注册码,但是只能找到我输的
,找不到正确的注册码,(我知道正确注册码是纯数字组合)我想可能它用的不是明码比较
,也许是1位位的比较或者是16进制数的比较。
4。这个软件我后来用pe-scan查出是UPX的壳但提示原入口点不可用,我用了很多upx脱壳软
件都脱不掉,提示压缩数据冲突!我上面自己手动脱壳是用的esp定律。在popad后面不是接
的jmp大跳。代码是这样的:
0070370A 61 popad
0070370B 8D4424 80 lea eax,dword ptr ss:[esp-80]
0070370F 6A 00 push 0
00703711 39C4 cmp esp,eax
00703713 ^ 75 FA jnz short 新.0070370F
00703715 83EC 80 sub esp,-80
00703718 - E9 2CD9CFFF jmp 新.00401049
0070371D 0000 add byte ptr ds:[eax],al
0070371F 0000 add byte ptr ds:[eax],al
我f8运行到jmp大跳的位置跳了过去出现下面代码:
00401049 6A 60 push 60
0040104B 68 20845000 push 新.00508420
00401050 E8 B7100000 call 新.0040210C
00401055 BF 94000000 mov edi,94
我想这个应该是入口点了,就在这里脱的壳。
上面就是具体的情况,希望各位大哥大姐能指导我1下,谢谢。我权限不够上传不了原代码。。。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!