内存监视器的算法分析
本帖最后由 cu629944 于 2014-8-6 11:51 编辑【文章标题】: 内存监视器的算法分析
【软件名称】: 内存注册机
【下载地址】: 自己搜索下载
【加壳方式】: 变形UPX
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
实现说一下,我家的金山报毒,我的AVAST不报毒,你们要是不放心可以不下,不过在我破解的过程中分析了一下,没有毒
是误报,如果不信,信杀软,请不用下载。
闲着无聊,来分析一个内存监视工具的算法,这个工具对些外挂的人是很有帮助的哦~怎么使用,大家应该都会吧~HOHO~
如果写了一个炫舞的外挂就借我用用~我对外挂就是一个白痴~呵呵~
查一下壳,是UPX的,应该是变形壳,脱壳机搞不定~呵呵,所以我们就用ESP定律来手动脱衣下壳~
脱壳后,不能运行,所以我们要修复一下IAT~可以运行,运行后,提示程序非法修改,说明程序有自校验,我们OD载入,
搜索“程序被非法修改”,找到后双击进入
00408821 83C4 04 add esp, 4
00408824 837D F8 00 cmp dword ptr , 0
00408828 0F85 63000000 jnz 00408891
0040882E 68 04000080 push 80000004
00408833 6A 00 push 0
00408835 68 6D824900 push 0049826D ; 注意
0040883A 68 01030080 push 80000301
0040883F 6A 00 push 0
00408841 68 30100000 push 1030
00408846 68 04000080 push 80000004
0040884B 6A 00 push 0
0040884D 68 72824900 push 00498272 ; 程序被非法修改 请重新下载!
00408852 68 03000000 push 3
00408857 BB C0004100 mov ebx, 004100C0
找到关键跳转JNZ,我们将它改为JE,然后右键==》保存为可执行文件,然后再OD载入,F9运行程序
搜索ascii码~,发现关键句,注册成功,我们双击进入,向上面发,发现没什么,所以就不再段首下断了
0040B79F E8 A163FFFF call 00401B45
0040B7A4 8945 F4 mov dword ptr , eax
0040B7A7 8B45 F4 mov eax, dword ptr
0040B7AA 50 push eax
0040B7AB 8B5D FC mov ebx, dword ptr
0040B7AE 85DB test ebx, ebx
0040B7B0 74 09 je short 0040B7BB
0040B7B2 53 push ebx
0040B7B3 E8 372B0000 call 0040E2EF
0040B7B8 83C4 04 add esp, 4
0040B7BB 58 pop eax
0040B7BC 8945 FC mov dword ptr , eax
0040B7BF 6A 01 push 1
0040B7C1 B8 69804900 mov eax, 00498069 ; 据分析及价格很高45333
我们在0040B79F下F2断点,输入注册信息“1234567890”,点击注册,程序断下后,F8跟踪,断下后,在
EAX寄存器,发现开始取我们的机器码“2141939516”,继续F8
0040B7B2 53 push ebx
0040B7B3 E8 372B0000 call 0040E2EF
0040B7B8 83C4 04 add esp, 4
0040B7BB 58 pop eax
0040B7BC 8945 FC mov dword ptr , eax
0040B7BF 6A 01 push 1
0040B7C1 B8 69804900 mov eax, 00498069 ; 据分析及价格很高45333
0040B7C6 8945 F4 mov dword ptr , eax
0040B7C9 8D45 F4 lea eax, dword ptr
0040B7CC 50 push eax
0040B7CD 8D45 FC lea eax, dword ptr
0040B7D0 50 push eax
0040B7D1 E8 1A6AFFFF call 004021F0
0040B7D6 8945 F0 mov dword ptr , eax
当到0040B7C1时,发现注释有一个不知道什么意思的字符串,需要小心一下~
继续F8单步,当到达0040B7D1的时候,发现到达算法CALL,我们F7进入
00402214 BB 50F54000 mov ebx, 0040F550
00402219 E8 EFC00000 call 0040E30D
0040221E 83C4 10 add esp, 10
00402221 8945 FC mov dword ptr , eax
00402224 8D45 FC lea eax, dword ptr
00402227 50 push eax
00402228 E8 14020000 call 00402441
0040222D 8945 F8 mov dword ptr , eax
00402230 8B5D FC mov ebx, dword ptr
00402233 85DB test ebx, ebx
00402235 74 09 je short 00402240
00402237 53 push ebx
00402238 E8 B2C00000 call 0040E2EF
当到达0040222D的时候,在EAX出现了一个字节集eax=00167060, (ASCII "{190,221,183,214,206,
246,188,176,188,219,184,241,186,220,184,223,52,53,51,51,51}")
堆栈 ss:=7FAB673C
这是什么东西呢?不知道,我突然想,是不是和刚才的那个不明所以的字符串有关系?我立即运行
破解计算器,将“据分析及价格很高45333”,转为字节集的时候,发现和这个字节集一模一样,所
以,我假设它为密钥
明白之后,继续F8单步走~
00402298 /75 05 jnz short 0040229F
0040229A |B8 10804900 mov eax, 00498010
0040229F \50 push eax
004022A0 68 06000000 push 6
004022A5 BB D0F14000 mov ebx, 0040F1D0
004022AA E8 5EC00000 call 0040E30D
004022AF 83C4 4C add esp, 4C
004022B2 8945 FC mov dword ptr , eax
004022B5 8B45 FC mov eax, dword ptr
当走过004022AA的时候,字节集的逗号全部去掉了~
004022F7 /75 05 jnz short 004022FE
004022F9 |B8 10804900 mov eax, 00498010
004022FE \50 push eax
004022FF 68 03000000 push 3
00402304 BB C0E94000 mov ebx, 0040E9C0
00402309 E8 FFBF0000 call 0040E30D
0040230E 83C4 28 add esp, 28
00402311 8945 FC mov dword ptr , eax
00402314 8B45 FC mov eax, dword ptr
当走过00402309的时候,在EAX的寄存器上出现了字符串
EAX 0015F6F8 ASCII "9022118321420624618817618"
经过分析,发现和上面的字节集,从第三位开始取,到第27是相同的,继续单步跟踪
0040231F /74 09 je short 0040232A
00402321 |53 push ebx
00402322 |E8 C8BF0000 call 0040E2EF
00402327 |83C4 04 add esp, 4
0040232A \58 pop eax
0040232B 8B5D 0C mov ebx, dword ptr
0040232E 8903 mov dword ptr , eax
00402330 FF75 08 push dword ptr
00402333 E8 19030000 call 00402651
00402338 8945 FC mov dword ptr , eax
当走到00402338的时候,发现取反机器码
00402333 E8 19030000 call 00402651
00402338 8945 FC mov dword ptr , eax
0040233B FF75 FC push dword ptr
0040233E 8B5D 0C mov ebx, dword ptr
00402341 FF33 push dword ptr
00402343 8B5D 08 mov ebx, dword ptr
00402346 FF33 push dword ptr
00402348 B9 03000000 mov ecx, 3
0040234D E8 3EF1FFFF call 00401490
00402352 83C4 0C add esp, 0C
当走到00402352的时候,EAX出现了取反机器码+取前27位的密钥+正的机器码
00402384 C745 FC 0000000>mov dword ptr , 0
0040238B 6A 00 push 0
0040238D FF75 FC push dword ptr
00402390 FF75 0C push dword ptr
00402393 E8 18060000 call 004029B0
00402398 8945 F8 mov dword ptr , eax
0040239B 8B45 F8 mov eax, dword ptr
当到004502398的时候,我们发现EAX取了一个MD5加密的字符串
eax=0017B9F0, (ASCII "7eb7e433ad0ff4ec58a474327ea5922c")
堆栈 ss:=00165E90, (ASCII "214193951690221183214206246188176186159391412")
说明利用了MD5加密,就是md5(取反机器码+密钥+机器码)
004023C5 /75 05 jnz short 004023CC
004023C7 |B8 10804900 mov eax, 00498010
004023CC \50 push eax
004023CD 68 01000000 push 1
004023D2 BB 20ED4000 mov ebx, 0040ED20
004023D7 E8 31BF0000 call 0040E30D
004023DC 83C4 10 add esp, 10
此时在EAX的寄存器出现了大写的MD5加密
00402406 /75 05 jnz short 0040240D
00402408 |B8 10804900 mov eax, 00498010
0040240D \50 push eax
0040240E 68 03000000 push 3
00402413 BB C0E94000 mov ebx, 0040E9C0
00402418 E8 F0BE0000 call 0040E30D
0040241D 83C4 28 add esp, 28
当到0040241D的时候,在EAX上出现了一个去掉前两位的MD5加密的大写字符串
EAX 0015F6F8 ASCII "B7E433AD0FF4EC58A474327EA"
继续跟踪就出了算法CALL到达比较的地方了~
所以这个算法就是MD5加密取反机器码+密钥+机器码,再去掉前两位,取第三位到第27位,便是我们的注册码了
此时写注册机~呵呵~注册机和软件都给大家打包了~
--------------------------------------------------------------------------------
【经验总结】
算法就是MD5加密取反机器码+密钥+机器码,再去掉前两位,取第三位到第27位,便是我们的注册码了,比较简单
--------------------------------------------------------------------------------
【版权声明】: 本文原创于Nisycc, 转载请注明作者并保持文章的完整, 谢谢!
2011年05月13日 16:07:32
呵呵破文写的不错支持一下了 老规矩,沙发自己的,你们别跟我抢哈~吼吼~ 汇编好难......不太懂....... 现在很少有人写算法分析了… 不错支持一下了 支持啊,你是从哪里来的大内密探……呵呵呵。东西直接拿走,前排支持。 这一个可是要支持的啊现在只会一些最简单的爆破
不过真的不会汇编真的不行的啊 我来定一个了 不厚道啊 发帖了都不说一句 我来看看怎么样·········