易语言非常规破解思路瞄杀
1、脱壳下载,安装,查壳,发现是:PECompact 2.x -> Jeremy Collake
熟悉 PECompact 2.x 的人都知道,这个壳的入口点就是程序的入口点,我们直接OD载入,
看到EIP那里就是入口点00401000
在输入he eip回车,F9运行,直接飞到OEP ,删除硬件断点,dump!
不知道是不是我OD的dump插件的问题,我用了几个OD怎么dump出来修复的都没用
只好 LoadPE 来dump ,然后 修复 ImportREC 修复
OEP输入1000,自动找RVA,修复,ok!
再查壳:E language *
==============================================================================================
2、常规方法
由于常规方法我只讲思路,就是EcE或者用bp MessageBoxA找找按钮事件,然后找到之好改跳转。
但是随便输入注册码都能提示注册成功,而软件还是没有注册。经过冥想,我找到了以下方法。
==============================================================================================
3、非常规方法
细心的人会发现,od载入这个软件会发现提示有压缩代码,一般我们加载压缩壳都会有这样的提示。
但是这个软件我们已经脱壳了,显示E language *
我们这时候用我师兄(luocong师兄,比我高几届,我现在还没毕业)的查找字符串插件是找不到字符串的。
这就是E语言封装的结果,我们来突破易语言的封装,找真正的“ OEP”吧。
==============================================================================================
E语言的通用入口点
00401000 >E8 06000000 call 0040100B ; F7进入
00401005 50 push eax ; 这是退出代码
00401006 E8 BB010000 call <jmp.&kernel32.ExitProcess> ; 退出释放进程
。。。。。(华丽的省略号)。。。。。
004010A2 50 push eax ; 初始化,准备加载E语言支持库
004010A3 E8 44010000 call 004011EC
004010A8 68 19104000 push 00401019 ; ASCII "krnln.fnr"
004010AD 8D85 FCFEFFFF lea eax, dword ptr
004010B3 50 push eax
004010B4 E8 25010000 call <jmp.&kernel32.lstrcat> ; lstrcatA函数
004010B9 50 push eax ; 文件名
004010BA E8 19010000 call <jmp.&kernel32.LoadLibraryA>; LoadLobraryA函数
004010BF 85C0 test eax, eax ; 测试支持库加载是否成功,成功就使下一句跳转
004010C1 0F85 9E000000 jnz 00401165 ; 不成功就从注册表中找E程序的安装目录
。。。。。(又是菜鸟最喜欢的华丽的省略号)。。。。。
00401191 FFD0 call eax ; 加载E格式进行本地封装等操作,F7进去
00401193 6A 00 push 0 ; ExitCode=0
00401195 E8 2C000000 call <jmp.&kernel32.ExitProcess> ; 退出释放进程
。。。。。(还是无比华丽的省略号)。。。。。
1002998A 55 push ebp
1002998B 8BEC mov ebp, esp
1002998D 8B45 08 mov eax, dword ptr
10029990 50 push eax
10029991 B9 10DB0E10 mov ecx, 100EDB10
10029996 E8 04F5FFFF call 10028E9F ; F7进去
1002999B 5D pop ebp
1002999C C2 0400 retn 4
==============================================================================================
到了看krnln.fnr的领空了
1002998A 55 push ebp
1002998B 8BEC mov ebp, esp
1002998D 8B45 08 mov eax, dword ptr
10029990 50 push eax
10029991 B9 10DB0E10 mov ecx, 100EDB10
10029996 E8 04F5FFFF call 10028E9F ; F7进去
1002999B 5D pop ebp
1002999C C2 0400 retn 4
之后就到了这里:
10028E9F 55 push ebp ; 对E语言格式进行封装
10028EA0 8BEC mov ebp, esp
10028EA2 83EC 08 sub esp, 8
10028EA5 53 push ebx
10028EA6 56 push esi
10028EA7 57 push edi
10028EA8 894D F8 mov dword ptr , ecx
10028EAB FF15 E0230C10 call dword ptr [<&KERNEL32.GetProc>; kernel32.GetProcessHeap
10028EB1 8B4D F8 mov ecx, dword ptr
10028EB4 8981 50040000 mov dword ptr , eax
10028EBA 8B55 08 mov edx, dword ptr
10028EBD 8B42 30 mov eax, dword ptr
10028EC0 83E0 01 and eax, 1
10028EC3 85C0 test eax, eax
10028EC5 75 10 jnz short 10028ED7
10028EC7 8B4D 08 mov ecx, dword ptr
10028ECA 51 push ecx
10028ECB 8B4D F8 mov ecx, dword ptr
10028ECE E8 4DFB0200 call 10058A20 ; 封装完成
10028ED3 FFE0 jmp eax ; 跳到程序真正的OEP
==============================================================================================
0041E5EF FC cld ;程序真正的OEP,可以搜索字符串了
0041E5F0 DBE3 finit
0041E5F2 E8 F7FFFFFF call 0041E5EE
0041E5F7 68 A1E54100 push 0041E5A1
0041E5FC B8 03000000 mov eax, 3
0041E601 E8 36000000 call 0041E63C
0041E606 83C4 04 add esp, 4
0041E609 E8 A2E1FFFF call 0041C7B0
0041E60E 68 CC000152 push 520100CC
0041E613 E8 1E000000 call 0041E636
0041E618 83C4 04 add esp, 4
0041E61B 6A 00 push 0
0041E61D E8 0E000000 call 0041E630
0041E622 E8 03000000 call 0041E62A
0041E627 83C4 04 add esp, 4
0041E62A- FF25 F9B24100 jmp dword ptr ; krnln.10029892
0041E630- FF25 FDB24100 jmp dword ptr ; krnln.100297FD
0041E636- FF25 01B34100 jmp dword ptr ; krnln.10029827
0041E63C- FF25 05B34100 jmp dword ptr ; krnln.10028F95
0041E642- FF25 F5B24100 jmp dword ptr ; krnln.1002995A
0041E648- FF25 E9B24100 jmp dword ptr ; krnln.100297D6
0041E64E- FF25 DDB24100 jmp dword ptr ; krnln.10028FBA
0041E654- FF25 E1B24100 jmp dword ptr ; krnln.10029011
0041E65A- FF25 E5B24100 jmp dword ptr ; krnln.100297B7
0041E660- FF25 EDB24100 jmp dword ptr ; krnln.10029852
0041E666- FF25 D5B24100 jmp dword ptr ; krnln.10029799
。。。。。(最后一次华丽的省略抢风头)。。。。。。。。
==============================================================================================
经过上面无聊的分析后发现:
那么以后找E语言真正的OEP只要在脱壳后的程序“右键”-“查找”-“二进制字符串”
输入 “ FC DB E3 ” 就可以到真正的易语言OEP了。
==============================================================================================
找到真正的OEP后就非常方便了,我们可以搜索字符串,找到关键字就可以秒杀了。
对真正的OEP按 F4 运行到所选,之后立刻“右键”-“超级字符串参考”-“查找ascii”
就会发现很多关于注册的字样,那么究竟谁才是真正的关键字眼呢?
一般都是找注册失败的提示啊,然后改跳转让它成功。
最后我找啊找,终于下面这句才是关键语句:
超级字串参考, 项目 30
地址=0041C33D
反汇编=PUSH dumped_.004032EF
文本字串=未注册版本,您只能转换10次,请您注册此软件!
双击来到这里:
0041C33D |68 EF324000 push 004032EF ; 未注册版本,您只能转换10次,请您注册此软件!
往上看看有个je跳,是这样的:
0041C330 /0F84 48000000 je 0041C37E ;这个跳,改jmp跳过就注册了
0041C336 |68 04000080 push 80000004
0041C33B |6A 00 push 0
0041C33D |68 EF324000 push 004032EF ; 未注册版本,您只能转换10次,请您注册此软件!
0041C342 |68 01030080 push 80000301
0041C347 |6A 00 push 0
0041C349 |68 02000000 push 2
0041C34E |68 02000400 push 40002
0041C353 |68 EF000116 push 160100EF
0041C358 |68 CC000152 push 520100CC
0041C35D |68 03000000 push 3
0041C362 |BB 80000000 mov ebx, 80
0041C367 |B8 03000000 mov eax, 3
0041C36C |E8 DD220000 call 0041E64E
0041C371 |83C4 28 add esp, 28
0041C374 |C705 00229A00 0>mov dword ptr , 1
0041C37E \6A 00 push 0
最后保存,运行,发现。。。已经注册了。。。连注册码都不用输入。。。 看不明白,我也想学。没人教。 很不懂····看不 明白 我以为是丝路的工具教程呢 好难懂 哦那么多程序 都是代码,不太明白,这东西难学呀 我们太笨了。学不了。。。 好多。。
认真学习 老天这是什么啊,怎么一点也不懂。 好难啊
看不懂哦 好难啊
看不懂哦 太难懂了,学会了的都是高手~~~ 看不明白 还是谢谢了~~ {:1_160:}{:1_160:} 我想拜师 学艺以后自己做G自己用 一头污水,那里有比较系统的做挂教材啊 非专业人士看不懂啦!!!!! 看不明白!!没有不是学这个的材料!!哎!!楼主!努力! 我是初学的,看了简直是天书
俗话说,罐子里都没那么黑 说实话,程序我还能看懂,破解这方面真的像白痴一样。
佩服LZ的功力!
页:
[1]
2