找回密码
 注册帐号
查看: 2980|回复: 25

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

  [复制链接]
发表于 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 [ebp-104]
  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 [ebp+8]
  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 [ebp+8]
  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 [ebp-8], ecx
  10028EAB    FF15 E0230C10   call    dword ptr [<&KERNEL32.GetProc>; kernel32.GetProcessHeap
  10028EB1    8B4D F8         mov     ecx, dword ptr [ebp-8]
  10028EB4    8981 50040000   mov     dword ptr [ecx+450], eax
  10028EBA    8B55 08         mov     edx, dword ptr [ebp+8]
  10028EBD    8B42 30         mov     eax, dword ptr [edx+30]
  10028EC0    83E0 01         and     eax, 1
  10028EC3    85C0            test    eax, eax
  10028EC5    75 10           jnz     short 10028ED7
  10028EC7    8B4D 08         mov     ecx, dword ptr [ebp+8]
  10028ECA    51              push    ecx
  10028ECB    8B4D F8         mov     ecx, dword ptr [ebp-8]
  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 [41B2F9]            ; krnln.10029892
  0041E630  - FF25 FDB24100   jmp     dword ptr [41B2FD]            ; krnln.100297FD
  0041E636  - FF25 01B34100   jmp     dword ptr [41B301]            ; krnln.10029827
  0041E63C  - FF25 05B34100   jmp     dword ptr [41B305]            ; krnln.10028F95
  0041E642  - FF25 F5B24100   jmp     dword ptr [41B2F5]            ; krnln.1002995A
  0041E648  - FF25 E9B24100   jmp     dword ptr [41B2E9]            ; krnln.100297D6
  0041E64E  - FF25 DDB24100   jmp     dword ptr [41B2DD]            ; krnln.10028FBA
  0041E654  - FF25 E1B24100   jmp     dword ptr [41B2E1]            ; krnln.10029011
  0041E65A  - FF25 E5B24100   jmp     dword ptr [41B2E5]            ; krnln.100297B7
  0041E660  - FF25 EDB24100   jmp     dword ptr [41B2ED]            ; krnln.10029852
  0041E666  - FF25 D5B24100   jmp     dword ptr [41B2D5]            ; 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 [9A2200], 1
  0041C37E   \6A 00           push    0
   
  最后保存,运行,发现。。。已经注册了。。。连注册码都不用输入。。。
发表于 2009-8-26 20:07:26 | 显示全部楼层
看不明白,我也想学。没人教。
发表于 2009-8-26 23:52:36 | 显示全部楼层
很不懂····看不 明白
发表于 2009-9-22 23:49:34 | 显示全部楼层
我以为是丝路的工具教程呢
发表于 2009-9-22 23:55:25 | 显示全部楼层
好难懂 哦  那么多程序
发表于 2009-9-26 11:55:16 | 显示全部楼层
都是代码,不太明白,这东西难学呀
发表于 2009-9-26 19:01:32 | 显示全部楼层
我们太笨了。学不了。。。
发表于 2009-9-30 21:33:32 | 显示全部楼层
好多。。
认真学习
发表于 2009-9-30 22:44:59 | 显示全部楼层
老天这是什么啊,怎么一点也不懂。
发表于 2009-11-11 18:53:36 | 显示全部楼层
好难啊
    看不懂哦
发表于 2009-11-12 20:17:59 | 显示全部楼层
好难啊
    看不懂哦
发表于 2009-11-14 18:02:53 | 显示全部楼层
太难懂了,学会了的都是高手~~~
发表于 2009-11-15 00:08:54 | 显示全部楼层
看不明白 还是谢谢了  ~~
发表于 2009-11-16 08:56:51 | 显示全部楼层
我想拜师 学艺  以后自己做G  自己用
头像被屏蔽
发表于 2009-11-25 21:08:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-12-7 16:43:33 | 显示全部楼层
一头污水,那里有比较系统的做挂教材啊
发表于 2009-12-28 22:17:13 | 显示全部楼层
非专业人士看不懂啦!!!!!
发表于 2009-12-29 01:22:52 | 显示全部楼层
看不明白!!没有不是学这个的材料!!哎!!楼主!努力!
发表于 2010-1-16 03:50:42 | 显示全部楼层
我是初学的,看了简直是天书

俗话说,罐子里都没那么黑
发表于 2010-1-21 13:41:29 | 显示全部楼层
说实话,程序我还能看懂,破解这方面真的像白痴一样。
佩服LZ的功力!
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

QQ|Archiver|手机版|小黑屋|依人网络官方网站 ( 陕ICP备19025998号-1 )

GMT+8, 2024-5-7 02:52 , Processed in 0.053734 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表