阿修罗 发表于 2009-8-26 13:01:58

易语言非常规破解思路瞄杀

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
   
最后保存,运行,发现。。。已经注册了。。。连注册码都不用输入。。。

奔向太阳 发表于 2009-8-26 20:07:26

看不明白,我也想学。没人教。

hj_y 发表于 2009-8-26 23:52:36

很不懂····看不 明白

li8012 发表于 2009-9-22 23:49:34

我以为是丝路的工具教程呢

153400191 发表于 2009-9-22 23:55:25

好难懂 哦那么多程序

wutingxun 发表于 2009-9-26 11:55:16

都是代码,不太明白,这东西难学呀

我心依然 发表于 2009-9-26 19:01:32

我们太笨了。学不了。。。

弄花香满衣 发表于 2009-9-30 21:33:32

好多。。
认真学习

情迷Atlanta 发表于 2009-9-30 22:44:59

老天这是什么啊,怎么一点也不懂。

wo789 发表于 2009-11-11 18:53:36

好难啊
    看不懂哦

好好学习 发表于 2009-11-12 20:17:59

好难啊
    看不懂哦

成熟坏男 发表于 2009-11-14 18:02:53

太难懂了,学会了的都是高手~~~

laosan1205 发表于 2009-11-15 00:08:54

看不明白 还是谢谢了~~

弦月轻风 发表于 2009-11-16 08:56:51

{:1_160:}{:1_160:} 我想拜师 学艺以后自己做G自己用

zgdth 发表于 2009-11-25 21:08:55

panjie86 发表于 2009-12-7 16:43:33

一头污水,那里有比较系统的做挂教材啊

weiliubino0 发表于 2009-12-28 22:17:13

非专业人士看不懂啦!!!!!

谂谂谂 发表于 2009-12-29 01:22:52

看不明白!!没有不是学这个的材料!!哎!!楼主!努力!

angle14 发表于 2010-1-16 03:50:42

我是初学的,看了简直是天书

俗话说,罐子里都没那么黑

笨啦蹬 发表于 2010-1-21 13:41:29

说实话,程序我还能看懂,破解这方面真的像白痴一样。
佩服LZ的功力!
页: [1] 2
查看完整版本: 易语言非常规破解思路瞄杀