dyangming 发表于 2005-3-4 19:01:18

【转贴】关于E语言写的使用硬盘序列号加密的程序通用切入点

关于E语言写的使用硬盘序列号加密的程序通用切入点   

--------------------------------------------------------------------------------
【文章标题】关于E语言写的使用硬盘序列号加密的程序通用切入点
【文章作者】hcbajiao(蓝雨)
【作者主页】http://www.9ycn.com
【作者邮箱】[email protected]
【所属组织】,http://poje.kmip.net:81QQ群成员
【软件名称】冒险岛加强外挂
【使用工具】OD,PEID
【软件限制】注册码
【破解平台】win xp sp2
【保护方式】UPX,Aspack
【开发语言】易语言
【本文写于】2005-04-27
【文章声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)

—————————————————————————————————
【破解分析】

先用PEID查有壳,ASPack 2.12 -> Alexey Solodovnikov ,载入OD,手动解决,
430001pushad                        OD载入程序停在这里
430002call 冒险岛加.0043000A      F7追入
430007jmp 45A004F7
43000Cpush ebp
43000Dretn
到这里
43000Apop ebp
43000Binc ebp
43000Cpush ebp
43000Dretn                        返回
到这里
430008jmp short 冒险岛加.0043000E
43000Apop ebp
43000Binc ebp
43000Cpush ebp
43000Dretn
43000Ecall 冒险岛加.00430014         F7追入
430013jmp short 冒险岛加.00430072
430015mov ebx,-13
到这里
430014pop ebp
430015mov ebx,-13
43001Aadd ebx,ebp
43001Csub ebx,30000
430022cmp dword ptr ss:,0
430029mov dword ptr ss:,ebx
43002Fjnz 冒险岛加.0043039A
430035lea eax,dword ptr ss:
43003Bpush eax
43003Ccall dword ptr ss:
430042mov dword ptr ss:,eax
430048mov edi,eax
43004Alea ebx,dword ptr ss:
43004Dpush ebx
43004Epush eax
43004Fcall dword ptr ss:
向下找POPAD指令
在这里
4303AFpopad                        在这里按F4
4303B0jnz short 冒险岛加.004303BA
4303B2mov eax,1
4303B7retn 0C
4303BApush 0
4303BFretn
按F4后指令变成这样
4303AFpopad
4303B0jnz short 冒险岛加.004303BA   跳
4303B2mov eax,1
4303B7retn 0C
4303BApush 冒险岛加.0042EADF      这里压入第二层壳的入口
4303BFretn                        返回到第二层壳的入口
第二层壳的入口是这样
42EADFnop
42EAE0popad
42EAE1mov esi,冒险岛加.0041B000
42EAE6lea edi,dword ptr ds:
42EAECadd word ptr ds:,5
42EAF5push edi
42EAF6or ebp,FFFFFFFF
42EAF9jmp short 冒险岛加.0042EB0A
向下找PUSHAD指令
在这里
42EC36pushad                   在这里按F4
42EC37jmp 冒险岛加.00403831    跳到真正的入口403831
42EC3Cadd byte ptr ds:,al
42EC3Eadd byte ptr ds:,al
42EC40add byte ptr ds:,al
42EC42add byte ptr ds:,al
42EC44add byte ptr ds:,al
真正的入口代码是这样
403831push ebp                  停在这里,现在用LOADPE选完全脱壳DUMP内存中的文件
403832mov ebp,esp
403834push -1
403836push 冒险岛加.004062F0
40383Bpush 冒险岛加.00404CA4
403840mov eax,dword ptr fs:
403846push eax
403847mov dword ptr fs:,esp
40384Esub esp,58
403851push ebx
403852push esi
403853push edi
403854mov dword ptr ss:,esp
DUMP好文件然后用ImportREC修复导入表
OEP填00003831
这样就脱掉了,但是脱壳的过程中源文件的覆盖数据被丢弃了,要补回去,不然程序不能运行!
用HEXWORKSHOP将源文件物理地址15800后的数据全部拷贝到内存,然后贴到脱壳后文件的最后就可以了!
OD重新载入,F9运行,ALT+E,找到这个可执行模块,项目 5
基数=00E50000
大小=00116000 (1138688.)
入口=00EE96B4 krnln.<ModuleEntryPoint>
名称=krnln
文件版本=1, 0, 0, 1
路径=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\E_80003\krnln.fnr
双击,使用OD插件 Ultra string Reference的Find ASCII功能,找到\\.\PhysicalDrive0双击,到这里:
E5DC46   68 CC7FF200    push krnln.00F27FCC         ; ASCII "\\.\PhysicalDrive0"
E5DC4B   FF15 00D4F000call dword ptr ds:[<&KERNEL32.Create>; kernel32.CreateFileA
E5DC51   8BF0         mov esi,eax
E5DC53   83FE FF      cmp esi,-1
E5DC56   0F84 C0000000je krnln.00E5DD1C
E5DC5C   57             push edi
E5DC5D   B9 06000000    mov ecx,6
E5DC62   33C0         xor eax,eax
E5DC64   8D7C24 14      lea edi,dword ptr ss:
在1000DC46上按F2下断
现在关闭外挂程序,重新载入
F9运行程序后,断在这里了
F8走回到主程序里
422F68   83C4 10         add esp,10
422F6B   C745 F0 00000000mov dword ptr ss:,0
422F72   68 00000000       push 0
422F77   BB C4060000       mov ebx,6C4
422F7C   E8 D2310000       call 冒险岛加.00426153
422F81   83C4 04         add esp,4
422F84   68 01030080       push 80000301
422F89   6A 00             push 0
422F8B   50                push eax
422F8C   68 01000000       push 1
422F91   BB 68010000       mov ebx,168
422F96   E8 B8310000       call 冒险岛加.00426153
422F9B   83C4 10         add esp,10            这里看到机器码:1347656527
422F9E   8945 E8         mov dword ptr ss:,eax
422FA1   68 04000080       push 80000004
422FA6   6A 00             push 0
。。。。。向下走,这里
4236A6   83C4 04         add esp,4
4236A9   8B5D F0         mov ebx,dword ptr ss:
4236AC   85DB            test ebx,ebx
4236AE   74 09             je short 冒险岛加.004236B9
4236B0   53                push ebx
4236B1   E8 7F2A0000       call 冒险岛加.00426135
4236B6   83C4 04         add esp,4
4236B9   8B45 D8         mov eax,dword ptr ss:
4236BC   8945 F0         mov dword ptr ss:,eax
4236BF   8B45 F0         mov eax,dword ptr ss:
4236C2   85C0            test eax,eax
4236C4   74 15             je short 冒险岛加.004236DB
4236C6   50                push eax            这里到看到注册码:DF65CDC2
4236C7   8BD8            mov ebx,eax
4236C9   E8 0AF7FFFF       call 冒险岛加.00422DD8
4236CE   40                inc eax
4236CF   50                push eax
4236D0   E8 8A2A0000       call 冒险岛加.0042615F
内存注册机:
地址:4236C6
次数:1
第一字节:50
指令长度:1
内存方式寄存器EAX
完工

—————————————————————————————————
【总结】

这个方法对E语言写的使用硬盘序列号加密的程序应该有通用性。
好了,就写到这里,大家一起多研究研究。。。。。。
附软件原版可以自己试试
地址:http://www.9ycn.com/attachment.php?...&download=1

[ Last edited by dyangming on 2005-3-4 at 07:03 PM ]

飘云 发表于 2005-3-4 21:25:37

来篇原创的啊 !

hyd009 发表于 2005-4-3 20:38:28

易语言的不好破解,hcbajiao写的破文教了一招,精品贴啊

xbb[DFCG] 发表于 2005-4-9 22:01:09

学习。收藏。

温柔 发表于 2005-4-14 23:04:12

学习了一招也不错~

云瑞 发表于 2005-5-2 23:09:50

h汗!真厉害!

rdsnow 发表于 2005-5-10 07:46:52

E语言的跟VB的有些类似,烦!要在程序代码和系统库之间跳来跳去!

filandcome 发表于 2005-6-24 08:31:23

jy02228574 发表于 2005-6-25 22:00:28

8错8错!

jy02228574 发表于 2005-6-25 22:07:59

寺院

在世在世万事大吉
页: [1] 2
查看完整版本: 【转贴】关于E语言写的使用硬盘序列号加密的程序通用切入点