han0535 发表于 2008-2-25 21:41:02

学习

菜鸟,请教

我我用自动脱壳机 脱掉 Armadillo3.78-4.xx 的 说成功后 请问下步如何办?

qq358183146 发表于 2008-3-22 09:44:18

回复 1# 的帖子

高..实在是高!!!/:012

unpack 发表于 2008-3-23 13:20:09

我追到注册码了
哈哈,用户名: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

unpack 发表于 2008-3-23 13:34:23

00401739    75 12         jnz   short 0040174D
这个地方我以为可以爆破,改成jz
但是当我再次输入用户名:unpack,假码:123456时,却注册不了,用真码当然不能注册成功了,但奇怪的是我把假码换成654321居然成功了,而且与真正的注册成功的样子不一样
截图如下:
改过的用反过来的假码注册的样子



没有改,追码注册得到的:

qinbin 发表于 2008-4-8 16:54:57

????这是怎么回事 啊我和楼上兄弟一样状况

daan 发表于 2008-4-30 10:31:10

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>
可惜算法不会

ptsos 发表于 2008-5-3 15:00:39

下载下来好好研究一下。

egowssc 发表于 2008-5-15 12:38:14

学习中,关于网络验证的希望有多一点教程啊

cur 发表于 2008-6-3 20:05:16

下载来研究下 嘿嘿 一起学习!!

kelvar 发表于 2008-6-10 23:40:09

kelvar
626898387088424554626712748
脱壳也比较好脱
运行一步F8后看到
popfd
popad
直接查找
popad
popfd
找到后直接在popfd上F2下断,断下来后F8一步直接到达
Upx壳的入口点
然后ESP定律
很快找到脱壳点
接下来破解
明码比较比较方便破解
页: 1 [2]
查看完整版本: 简单脱双层壳+注册机编写CrackMe分析(高手路过)