菜鸟,请教
我我用自动脱壳机 脱掉 Armadillo3.78-4.xx 的 说成功后 请问下步如何办?
回复 1# 的帖子
高..实在是高!!!/:012 我追到注册码了哈哈,用户名:unpack
注册码:630999170928464232629205790
算法我是这么认为的,分为四部分,中间直接相连,不要用其他什么符号。
像我的就是63099--第二次算的,作为注册码的第一部分;9170928---第三次算的,作为注册码的第二部分;4642326---第一次算的,作为注册码的第三部分;9205790--第四次算的,作为注册码的第四部分。但是我在跟第四算法是还是没有搞明白,把我的不完全算法发上:004015A6 53 push ebx
004015A7 55 push ebp
004015A8 56 push esi
004015A9 57 push edi
004015AA 8BD9 mov ebx, ecx
004015AC 6A 01 push 1
004015AE 895C24 18 mov , ebx
004015B2 E8 59040000 call <jmp.&mfc42.#6334>
004015B7 8B53 60 mov edx,
004015BA 83C9 FF or ecx, FFFFFFFF
004015BD 8BFA mov edi, edx
004015BF 33C0 xor eax, eax
004015C1 F2:AE repne scas byte ptr es:
004015C3 F7D1 not ecx
004015C5 2BF9 sub edi, ecx
004015C7 8DAC24 44010000 lea ebp,
004015CE 8BC1 mov eax, ecx
004015D0 8BF7 mov esi, edi
004015D2 8BFD mov edi, ebp
004015D4 8B52 F8 mov edx, ; 用户名长度等于edx
004015D7 C1E9 02 shr ecx, 2
004015DA F3:A5 rep movs dword ptr es:, dword p>
004015DC 8BC8 mov ecx, eax
004015DE 83E1 03 and ecx, 3
004015E1 F3:A4 rep movs byte ptr es:, byte ptr>
004015E3 0FBEB424 440100>movsx esi, byte ptr ; 用户名的第一位的十六进制给esi
004015EB 85D2 test edx, edx
004015ED 75 1D jnz short 0040160C
004015EF 52 push edx
004015F0 68 44304000 push 00403044 ; 提示
004015F5 68 34304000 push 00403034 ; 请输入完整信息!
004015FA 8BCB mov ecx, ebx
004015FC E8 09040000 call <jmp.&mfc42.#4224>
00401601 5F pop edi
00401602 5E pop esi
00401603 5D pop ebp
00401604 5B pop ebx
00401605 81C4 FC010000 add esp, 1FC
0040160B C3 retn
0040160C 8BC2 mov eax, edx ; 把用户名长度edx给eax
0040160E 6A 0A push 0A
00401610 0FAFC6 imul eax, esi ; 用户名第一位与长度相乘(75(u)*6=2BE)
00401613 8BC8 mov ecx, eax ; ecx=eax=2BE
00401615 8B3D D0214000 mov edi, [<&msvcrt.#353>] ; msvcrt._itoa
0040161B C1E1 04 shl ecx, 4 ; ecx左移四个字符,相当于十六进制左移一位,也就是乘以十,即2BE左移得到2BE0
0040161E 03C8 add ecx, eax ; ecx=ecx+eax=2BE0+2BE=2E9E
00401620 8D0C88 lea ecx, ; ecx=ecx+ecx*4=BD36
00401623 C1E1 03 shl ecx, 3 ; ecx*8=5E9B0
00401626 2BC8 sub ecx, eax ; ecx=ecx-eax=5E9B0-2BE=5E6F2
00401628 8D0C49 lea ecx, ; ecx=ecx+ecx*2=ecx*3=11B4D6
0040162B 8D1C88 lea ebx, ; ebx=eax+ecx*4=46D616(到后面用作注册码第三部分相连)
注明:这是第一次算的的ebx,但是没有压栈,后面压栈的时候就做为注册码的第三部分。
--------------------------------------------------------------------------------------------------------
0040162E 8D8424 AC010000 lea eax, ; eax=esp+1AC=13F6A8+1AC=13F854
00401635 50 push eax
00401636 8D0492 lea eax, ; eax=edx*5=6*5=1E
00401639 C1E0 04 shl eax, 4 ; eax*10=1E0
0040163C 2BC2 sub eax, edx ; eax=eax-edx=1E0-6=1DA
0040163E 8D0C46 lea ecx, ; ecx=(u)75+eax*2=429
00401641 03C1 add eax, ecx ; eax=eax+ecx=1DA+429=603
00401643 8D1480 lea edx, ; edx=eax*5=603*5=1E0F
00401646 8D04D0 lea eax, ; eax=eax+edx*8=eax*(1+5*8)=eax*(1+28)=F67B(二进制为63099做注册码的起始)
这是第二次算的,作为注册码的第一部分
--------------------------------------------------------------------------------------------------------
00401649 50 push eax
0040164A FFD7 call edi
0040164C 8D04B6 lea eax, ; eax=esi*5=249
0040164F 8D8C24 EC000000 lea ecx, ; ecx=esp+EC=13F6A0+EC=13F78C
00401656 6A 0A push 0A
00401658 51 push ecx
00401659 8D1480 lea edx, ; edx=eax*5=249*5=B6D
0040165C 8D0456 lea eax, ; eax=esi+edx*2=(u)75+B6D*2=174F
0040165F C1E0 05 shl eax, 5 ; eax=eax*20=2E9E0
00401662 03C6 add eax, esi ; eax=eax+75=2E9E0+(u)75=2EA55
00401664 8D0440 lea eax, ; eax=eax+eax*2=eax*3=8BEFF
00401667 C1E0 04 shl eax, 4 ; eax=eax*10=8BEFF0(二进制为9170928连在上面的注册码之后)
这是第三次算的,作为注册码的第二部分!
--------------------------------------------------------------------------------------------------------
0040166A 50 push eax
0040166B FFD7 call edi
0040166D 8D8C24 94000000 lea ecx, ; ecx=esp+94=13F694+94=13F728
00401674 6A 0A push 0A
00401676 51 push ecx
00401677 53 push ebx ; ebx的值的二进制作为注册码的第三部分压栈(46D616=二进制4642326)
这个地方才把ebx压栈,作为注册码的第三部分!
------------------------------------------------------------------------------------------
00401678 FFD7 call edi
0040167A 81C3 20170000 add ebx, 1720 ; ebx=ebx+1720=46D616+1720=46ED36
00401680 8D5424 3C lea edx, ; edx=esp+3C=13F688+3C=13F6C4
00401684 895C24 34 mov , ebx
00401688 6A 0A push 0A
0040168A DB4424 38 fild dword ptr ; 装入整数到st(0)
0040168E 52 push edx
0040168F DC0D 38254000 fmul qword ptr ; 乘上一个实数
00401695 E8 D6030000 call <jmp.&msvcrt.#281> //这个跟进去后,然后出来,eax变成下面的1BDA51E,这个地方很是不懂!!!!!
0040169A 50 push eax ; 把eax=1BDA51E压栈
这个地方把eax压栈,作为注册码的第四部分,但是没有搞清楚怎么得到的!
-------------------------------------------------------------------------------------
0040169B FFD7 call edi
0040169D 8D7C24 48 lea edi,
004016A1 83C9 FF or ecx, FFFFFFFF ; ecx值不变为13F6C7
004016A4 33C0 xor eax, eax ; eax清零
004016A6 8D9424 AC000000 lea edx,
004016AD F2:AE repne scas byte ptr es:
004016AF F7D1 not ecx
004016B1 2BF9 sub edi, ecx
004016B3 8BF7 mov esi, edi
004016B5 8BD9 mov ebx, ecx
004016B7 8BFA mov edi, edx
004016B9 83C9 FF or ecx, FFFFFFFF
004016BC F2:AE repne scas byte ptr es:
004016BE 8BCB mov ecx, ebx
004016C0 4F dec edi
004016C1 C1E9 02 shr ecx, 2
004016C4 F3:A5 rep movs dword ptr es:, dword p>
004016C6 8BCB mov ecx, ebx
004016C8 8D9C24 D8010000 lea ebx,
004016CF 83E1 03 and ecx, 3
004016D2 F3:A4 rep movs byte ptr es:, byte ptr>
004016D4 8DBC24 10010000 lea edi,
004016DB 83C9 FF or ecx, FFFFFFFF
004016DE F2:AE repne scas byte ptr es:
004016E0 F7D1 not ecx
004016E2 2BF9 sub edi, ecx
004016E4 8BF7 mov esi, edi
004016E6 8BE9 mov ebp, ecx
004016E8 8BFB mov edi, ebx
004016EA 83C9 FF or ecx, FFFFFFFF
004016ED F2:AE repne scas byte ptr es:
004016EF 4F dec edi
004016F0 8BCD mov ecx, ebp
004016F2 C1E9 02 shr ecx, 2
004016F5 F3:A5 rep movs dword ptr es:, dword p>
004016F7 8BCD mov ecx, ebp
004016F9 83E1 03 and ecx, 3
004016FC F3:A4 rep movs byte ptr es:, byte ptr>
004016FE 8BFA mov edi, edx
00401700 83C9 FF or ecx, FFFFFFFF
00401703 F2:AE repne scas byte ptr es:
00401705 F7D1 not ecx
00401707 2BF9 sub edi, ecx
00401709 8BF7 mov esi, edi
0040170B 8BFB mov edi, ebx
0040170D 8BE9 mov ebp, ecx
0040170F 8BD7 mov edx, edi
00401711 83C9 FF or ecx, FFFFFFFF
00401714 52 push edx
00401715 F2:AE repne scas byte ptr es:
00401717 8BCD mov ecx, ebp
00401719 4F dec edi
0040171A C1E9 02 shr ecx, 2
0040171D F3:A5 rep movs dword ptr es:, dword p>
0040171F 8BCD mov ecx, ebp
00401721 83E1 03 and ecx, 3
00401724 F3:A4 rep movs byte ptr es:, byte ptr>
00401726 8B7424 48 mov esi,
0040172A 8B46 64 mov eax,
0040172D 50 push eax
0040172E FF15 C4214000 call [<&msvcrt.#391>] ; (initial cpu selection)
00401734 83C4 38 add esp, 38
00401737 85C0 test eax, eax
00401739 75 12 jnz short 0040174D
0040173B 50 push eax
0040173C 68 2C304000 push 0040302C ; 恭喜
00401741 68 20304000 push 00403020 ; 注册成功!
00401746 8BCE mov ecx, esi
00401748 E8 BD020000 call <jmp.&mfc42.#4224>
0040174D 6A 00 push 0
0040174F 8BCE mov ecx, esi
00401751 E8 BA020000 call <jmp.&mfc42.#6334>
00401756 5F pop edi
00401757 5E pop esi
00401758 5D pop ebp
00401759 5B pop ebx
0040175A 81C4 FC010000 add esp, 1FC
00401760 C3 retn 00401739 75 12 jnz short 0040174D
这个地方我以为可以爆破,改成jz
但是当我再次输入用户名:unpack,假码:123456时,却注册不了,用真码当然不能注册成功了,但奇怪的是我把假码换成654321居然成功了,而且与真正的注册成功的样子不一样
截图如下:
改过的用反过来的假码注册的样子
没有改,追码注册得到的:
????这是怎么回事 啊我和楼上兄弟一样状况 OD载入
查找字符串。注册成功。
来到这里
0040172E FF15 C4214000 call dword ptr [<&msvcrt._mbscmp>] ; msvcrt._mbscmp 进行比较
00401734 83C4 38 add esp, 38
00401737 85C0 test eax, eax
00401739 75 12 jnz short 0040174D
0040173B 50 push eax
0040173C 68 2C304000 push 0040302C ; 恭喜
00401741 68 20304000 push 00403020 ; 注册成功!
00401746 8BCE mov ecx, esi
分析
0040172E FF15 C4214000 call dword ptr [<&msvcrt._mbscmp>] ; msvcrt._mbscmp 这里进行字符串比较。在这里下断即可拦截。
于是输入假码。出现
0012F670 00000000
0012F674 00383AC0 |s1 = "123456"
0012F678 0012F854 \s2 = "429687838400264520016657477"-----------真码
测试注册成功。
0040172E FF15 C4214000 call 这里进行内存注册机的CALL
退出时候有个提示窗口。去掉它
004017C0 56 push esi
004017C1 6A FF push 0 ---------------------0改-1即可去掉
004017C3 68 60304000 push 00403060 ; 55555
004017C8 8BF1 mov esi, ecx
004017CA 68 4C304000 push 0040304C ; 不想玩还是没耐心?
004017CF E8 36020000 call <jmp.&mfc42.#4224>
可惜算法不会 下载下来好好研究一下。 学习中,关于网络验证的希望有多一点教程啊 下载来研究下 嘿嘿 一起学习!! kelvar
626898387088424554626712748
脱壳也比较好脱
运行一步F8后看到
popfd
popad
直接查找
popad
popfd
找到后直接在popfd上F2下断,断下来后F8一步直接到达
Upx壳的入口点
然后ESP定律
很快找到脱壳点
接下来破解
明码比较比较方便破解
页:
1
[2]