樊盟 发表于 2010-5-30 10:27:11

分析主讲软件第二篇:精装友情通讯录算法分析 By:yAtEs 2010.5.30

分析主讲软件第二篇:精装友情通讯录算法分析 By:yAtEs 2010.5.30

Borland Delphi 6.0 - 7.0

定单号:65612
注册码:12345

F12暂停法回溯到关键位置:

/////////////////////////////////////////////////////////////////////////////////////////////////////
0051041D|.55            push    ebp
0051041E|.68 8D065100   push    0051068D
00510423|.64:FF30       push    dword ptr fs:
00510426|.64:8920       mov   dword ptr fs:, esp
00510429|.68 80000000   push    80                        ; /BufSize = 80 (128.)
0051042E|.8D85 7BFFFFFF lea   eax, dword ptr    ; |
00510434|.50            push    eax                     ; |Buffer
00510435|.E8 D26CEFFF   call    <jmp.&kernel32.GetSystemD>; \GetSystemDirectoryA
0051043A|.8D45 FC       lea   eax, dword ptr
0051043D|.8D95 7BFFFFFF lea   edx, dword ptr
00510443|.B9 81000000   mov   ecx, 81
00510448|.E8 3746EFFF   call    00404A84
0051044D|.8D95 74FFFFFF lea   edx, dword ptr
00510453|.8B83 34030000 mov   eax, dword ptr
00510459|.E8 D20BF3FF   call    00441030
0051045E|.83BD 74FFFFFF>cmp   dword ptr , 0   ;//判断是否输入注册码
00510465|.74 1A         je      short 00510481            ;//跳则失败
00510467|.8D95 70FFFFFF lea   edx, dword ptr
0051046D|.8B83 10030000 mov   eax, dword ptr
00510473|.E8 B80BF3FF   call    00441030
00510478|.83BD 70FFFFFF>cmp   dword ptr , 0   ;//判断是否输入定单号
0051047F|.75 0F         jnz   short 00510490            ;//不跳则失败
00510481|>B8 A4065100   mov   eax, 005106A4
00510486|.E8 999DF2FF   call    0043A224
0051048B|.E9 80010000   jmp   00510610
00510490|>8D95 6CFFFFFF lea   edx, dword ptr
00510496|.8B83 34030000 mov   eax, dword ptr
0051049C|.E8 8F0BF3FF   call    00441030
005104A1|.8B85 6CFFFFFF mov   eax, dword ptr
005104A7|.50            push    eax
005104A8|.8D95 60FFFFFF lea   edx, dword ptr
005104AE|.8B83 10030000 mov   eax, dword ptr
005104B4|.E8 770BF3FF   call    00441030
005104B9|.8B85 60FFFFFF mov   eax, dword ptr    ;//取定单号
005104BF|.E8 5C8EEFFF   call    00409320                  ;//定单号转换为十六进制存入EAX
005104C4|.B9 D1000000   mov   ecx, 0D1                  ;//0D1存入ECX
005104C9|.99            cdq
005104CA|.F7F9          idiv    ecx                     ;//EAX÷ECX,商送EAX,余送EDX
005104CC|.8BC2          mov   eax, edx                  ;//余数C3送入EAX
005104CE|.8D95 64FFFFFF lea   edx, dword ptr
005104D4|.E8 E38DEFFF   call    004092BC                  ;//取余数十进制数
005104D9|.FFB5 64FFFFFF push    dword ptr       ;//C3=195
005104DF|.8D95 54FFFFFF lea   edx, dword ptr
005104E5|.8B83 10030000 mov   eax, dword ptr
005104EB|.E8 400BF3FF   call    00441030
005104F0|.8B85 54FFFFFF mov   eax, dword ptr    ;//取定单号
005104F6|.E8 258EEFFF   call    00409320                  ;//取定单号的十六进制存入EAX
005104FB|.8D95 58FFFFFF lea   edx, dword ptr
00510501|.E8 C6FCFFFF   call    005101CC                  ;//第一次跟进
00510506|.8B85 58FFFFFF mov   eax, dword ptr    ;//66502174
0051050C|.E8 0F8EEFFF   call    00409320                  ;//66502174的十六进制存入EAX
00510511|.8D95 5CFFFFFF lea   edx, dword ptr
00510517|.E8 90FDFFFF   call    005102AC                  ;//第二次跟进
0051051C|.FFB5 5CFFFFFF push    dword ptr       ;//37l2x544~g5273
00510522|.68 C4065100   push    005106C4                  ;//!
00510527|.8D85 68FFFFFF lea   eax, dword ptr
0051052D|.BA 03000000   mov   edx, 3
00510532|.E8 5D46EFFF   call    00404B94
00510537|.8B95 68FFFFFF mov   edx, dword ptr    ;//真码出现:19537l2x544~g5273!
0051053D|.58            pop   eax                     ;//假码
0051053E|.E8 D546EFFF   call    00404C18                  ;//真假码比较CALL
00510543|.0F85 A3000000 jnz   005105EC                  ;//关键跳,跳向注册失败!
00510549|.B8 D0065100   mov   eax, 005106D0
0051054E|.E8 D19CF2FF   call    0043A224                  ;//注册成功
00510553|.A1 14BA5100   mov   eax, dword ptr
00510558|.8B00          mov   eax, dword ptr
0051055A|.8B80 18030000 mov   eax, dword ptr
00510560|.8B80 08020000 mov   eax, dword ptr
00510566|.33D2          xor   edx, edx
00510568|.E8 87ECF5FF   call    0046F1F4
0051056D|.BA F4065100   mov   edx, 005106F4
00510572|.E8 D9EBF5FF   call    0046F150
00510577|.8D85 50FFFFFF lea   eax, dword ptr
0051057D|.B9 10075100   mov   ecx, 00510710             ;ASCII "\hdwlz.dll"
00510582|.8B55 FC       mov   edx, dword ptr
00510585|.E8 9645EFFF   call    00404B20
0051058A|.8B8D 50FFFFFF mov   ecx, dword ptr
00510590|.B2 01         mov   dl, 1
00510592|.A1 C4264600   mov   eax, dword ptr
00510597|.E8 D821F5FF   call    00462774
0051059C|.8BF0          mov   esi, eax
0051059E|.8D95 4CFFFFFF lea   edx, dword ptr
005105A4|.8B83 10030000 mov   eax, dword ptr
005105AA|.E8 810AF3FF   call    00441030
005105AF|.8B85 4CFFFFFF mov   eax, dword ptr
005105B5|.50            push    eax
005105B6|.B9 24075100   mov   ecx, 00510724             ;ASCII "setet567"
005105BB|.BA 38075100   mov   edx, 00510738             ;ASCII "sym"
005105C0|.8BC6          mov   eax, esi
005105C2|.8B18          mov   ebx, dword ptr
005105C4|.FF53 04       call    dword ptr
005105C7|.8D85 48FFFFFF lea   eax, dword ptr
005105CD|.B9 44075100   mov   ecx, 00510744             ;ASCII "\hdw1z.dll"
005105D2|.8B55 FC       mov   edx, dword ptr
005105D5|.E8 4645EFFF   call    00404B20
005105DA|.8B85 48FFFFFF mov   eax, dword ptr
005105E0|.BA 02000000   mov   edx, 2
005105E5|.E8 7E8FEFFF   call    00409568
005105EA|.EB 24         jmp   short 00510610
005105EC|>B8 58075100   mov   eax, 00510758
005105F1|.E8 2E9CF2FF   call    0043A224                  ;//注册失败
///////////////////////////////////////////第一次跟进来到这里////////////////////////////////////////
005101CC/$55            push    ebp
005101CD|.8BEC          mov   ebp, esp
005101CF|.33C9          xor   ecx, ecx
005101D1|.51            push    ecx
005101D2|.51            push    ecx
005101D3|.51            push    ecx
005101D4|.51            push    ecx
005101D5|.53            push    ebx
005101D6|.56            push    esi
005101D7|.8BF2          mov   esi, edx
005101D9|.8BD8          mov   ebx, eax
005101DB|.33C0          xor   eax, eax
005101DD|.55            push    ebp
005101DE|.68 9C025100   push    0051029C
005101E3|.64:FF30       push    dword ptr fs:
005101E6|.64:8920       mov   dword ptr fs:, esp
005101E9|.81F3 F1250B00 xor   ebx, 0B25F1               ;//定单号十六进制与0B25F1进行异或运算
005101EF|.8BC3          mov   eax, ebx
005101F1|.33D2          xor   edx, edx
005101F3|.52            push    edx
005101F4|.50            push    eax
005101F5|.8D45 FC       lea   eax, dword ptr
005101F8|.E8 EF90EFFF   call    004092EC                  ;//将上面异或运算得出的结果转换为十进制
005101FD|.8B45 FC       mov   eax, dword ptr     ;//665021
00510200|.0FB600      movzx   eax, byte ptr        ;//取665021第一位ASCII存入EAX
00510203|.8B55 FC       mov   edx, dword ptr
00510206|.0FB652 01   movzx   edx, byte ptr    ;//取665021第二位ASCII存入EDX
0051020A|.03C2          add   eax, edx                  ;//相加
0051020C|.B9 05000000   mov   ecx, 5                  ;//5存入ECX
00510211|.99            cdq
00510212|.F7F9          idiv    ecx                     ;//EAX÷ECX,商送EAX,余数送EDX
00510214|.80C2 34       add   dl, 34                  ;//余数+34
00510217|.8855 F8       mov   byte ptr , dl      ;//计算得37(7)
0051021A|.8B45 FC       mov   eax, dword ptr     ;//665021
0051021D|.0FB640 02   movzx   eax, byte ptr    ;//取665021第三位ASCII存入EAX
00510221|.8B55 FC       mov   edx, dword ptr
00510224|.0FB652 03   movzx   edx, byte ptr    ;//取665021第四位ASCII存入EDX
00510228|.03C2          add   eax, edx                  ;//相加
0051022A|.B9 05000000   mov   ecx, 5                  ;//5存入ECX
0051022F|.99            cdq
00510230|.F7F9          idiv    ecx                     ;//EAX÷ECX,商送EAX,余数送EDX
00510232|.8BDA          mov   ebx, edx                  ;//余数送入EBX
00510234|.80C3 33       add   bl, 33                  ;//余数+33
00510237|.885D F9       mov   byte ptr , bl      ;//计算得34(4)
0051023A|.8D45 F4       lea   eax, dword ptr
0051023D|.8A55 F8       mov   dl, byte ptr
00510240|.E8 B747EFFF   call    004049FC
00510245|.8B45 F4       mov   eax, dword ptr
00510248|.8D55 FC       lea   edx, dword ptr
0051024B|.B9 1B000000   mov   ecx, 1B
00510250|.E8 5F4BEFFF   call    00404DB4                  ;//6650217
00510255|.8D45 F0       lea   eax, dword ptr
00510258|.8BD3          mov   edx, ebx
0051025A|.E8 9D47EFFF   call    004049FC
0051025F|.8B45 F0       mov   eax, dword ptr
00510262|.8D55 FC       lea   edx, dword ptr
00510265|.B9 19000000   mov   ecx, 19
0051026A|.E8 454BEFFF   call    00404DB4                  ;//66502174
///////////////////////////////////////////第二次跟进来到这里////////////////////////////////////////
005102AC/$55            push    ebp
005102AD|.8BEC          mov   ebp, esp
005102AF|.33C9          xor   ecx, ecx
005102B1|.51            push    ecx
005102B2|.51            push    ecx
005102B3|.51            push    ecx
005102B4|.51            push    ecx
005102B5|.51            push    ecx
005102B6|.51            push    ecx
005102B7|.53            push    ebx
005102B8|.56            push    esi
005102B9|.8BF2          mov   esi, edx
005102BB|.8BD8          mov   ebx, eax
005102BD|.33C0          xor   eax, eax
005102BF|.55            push    ebp
005102C0|.68 F8035100   push    005103F8
005102C5|.64:FF30       push    dword ptr fs:
005102C8|.64:8920       mov   dword ptr fs:, esp
005102CB|.81F3 8776FBDD xor   ebx, DDFB7687             ;//66502174的十六进制数与DDFB7687异或
005102D1|.8BC3          mov   eax, ebx
005102D3|.33D2          xor   edx, edx
005102D5|.52            push    edx
005102D6|.50            push    eax
005102D7|.8D45 FC       lea   eax, dword ptr
005102DA|.E8 0D90EFFF   call    004092EC                  ;//将上面异或运算得出的结果转换为十进制
005102DF|.8B45 FC       mov   eax, dword ptr     ;//3725445273
005102E2|.0FB600      movzx   eax, byte ptr        ;//取3725445273第一位ASCII存入EAX
005102E5|.8B55 FC       mov   edx, dword ptr
005102E8|.0FB652 01   movzx   edx, byte ptr    ;//取3725445273第二位ASCII存入EDX
005102EC|.03C2          add   eax, edx                  ;//相加
005102EE|.B9 05000000   mov   ecx, 5                  ;//5存入ECX
005102F3|.99            cdq
005102F4|.F7F9          idiv    ecx                     ;//EAX÷ECX,商送EAX,余数送EDX
005102F6|.80C2 66       add   dl, 66                  ;//余数+66
005102F9|.8855 F8       mov   byte ptr , dl      ;//计算得67(g)
005102FC|.8B45 FC       mov   eax, dword ptr     ;//3725445273
005102FF|.0FB640 02   movzx   eax, byte ptr    ;//取3725445273第三位ASCII存入EAX
00510303|.8B55 FC       mov   edx, dword ptr
00510306|.0FB652 03   movzx   edx, byte ptr    ;//取3725445273第四位ASCII存入EDX
0051030A|.03C2          add   eax, edx                  ;//相加
0051030C|.B9 05000000   mov   ecx, 5                  ;//5存入ECX
00510311|.99            cdq
00510312|.F7F9          idiv    ecx                     ;//EAX÷ECX,商送EAX,余数送EDX
00510314|.80C2 75       add   dl, 75                  ;//余数+75
00510317|.8855 F9       mov   byte ptr , dl      ;//计算得78(x)
0051031A|.8B45 FC       mov   eax, dword ptr     ;//3725445273
0051031D|.0FB640 04   movzx   eax, byte ptr    ;//取3725445273第五位ASCII存入EAX
00510321|.8B55 FC       mov   edx, dword ptr
00510324|.0FB652 05   movzx   edx, byte ptr    ;//取3725445273第六位ASCII存入EDX
00510328|.03C2          add   eax, edx                  ;//相加
0051032A|.B9 05000000   mov   ecx, 5                  ;//5存入ECX
0051032F|.99            cdq
00510330|.F7F9          idiv    ecx                     ;//EAX÷ECX,商送EAX,余数送EDX
00510332|.80C2 7A       add   dl, 7A                  ;//余数+7A
00510335|.8855 FA       mov   byte ptr , dl      ;//计算得7E(~)
00510338|.8B45 FC       mov   eax, dword ptr     ;//3725445273
0051033B|.0FB640 06   movzx   eax, byte ptr    ;//取3725445273第七位ASCII存入EAX
0051033F|.8B55 FC       mov   edx, dword ptr
00510342|.0FB652 07   movzx   edx, byte ptr    ;//取3725445273第八位ASCII存入EDX
00510346|.03C2          add   eax, edx                  ;//相加
00510348|.8B55 FC       mov   edx, dword ptr
0051034B|.0FB652 08   movzx   edx, byte ptr    ;//取3725445273第九位ASCII存入EDX
0051034F|.03C2          add   eax, edx                  ;//与上面的和相加
00510351|.B9 05000000   mov   ecx, 5                  ;//5存入ECX
00510356|.99            cdq
00510357|.F7F9          idiv    ecx                     ;//EAX÷ECX,商送EAX,余数送EDX
00510359|.80C2 69       add   dl, 69                  ;//余数+69
0051035C|.8855 FB       mov   byte ptr , dl      ;//计算得6C(l)
0051035F|.8D45 F4       lea   eax, dword ptr
00510362|.8A55 F8       mov   dl, byte ptr       ;//g
00510365|.E8 9246EFFF   call    004049FC
0051036A|.8B45 F4       mov   eax, dword ptr
0051036D|.8D55 FC       lea   edx, dword ptr
00510370|.B9 07000000   mov   ecx, 7
00510375|.E8 3A4AEFFF   call    00404DB4                  ;//372544g5273
0051037A|.8D45 F0       lea   eax, dword ptr
0051037D|.8A55 FB       mov   dl, byte ptr       ;//l
00510380|.E8 7746EFFF   call    004049FC
00510385|.8B45 F0       mov   eax, dword ptr
00510388|.8D55 FC       lea   edx, dword ptr
0051038B|.B9 03000000   mov   ecx, 3
00510390|.E8 1F4AEFFF   call    00404DB4                  ;//37l2544g5273
00510395|.8D45 EC       lea   eax, dword ptr
00510398|.8A55 F9       mov   dl, byte ptr       ;//x
0051039B|.E8 5C46EFFF   call    004049FC
005103A0|.8B45 EC       mov   eax, dword ptr
005103A3|.8D55 FC       lea   edx, dword ptr
005103A6|.B9 05000000   mov   ecx, 5
005103AB|.E8 044AEFFF   call    00404DB4                  ;//37l2x544g5273
005103B0|.8D45 E8       lea   eax, dword ptr
005103B3|.8A55 FA       mov   dl, byte ptr       ;//~
005103B6|.E8 4146EFFF   call    004049FC
005103BB|.8B45 E8       mov   eax, dword ptr
005103BE|.8D55 FC       lea   edx, dword ptr
005103C1|.B9 09000000   mov   ecx, 9
005103C6|.E8 E949EFFF   call    00404DB4                  ;//37l2x544~g5273
/////////////////////////////////////////////////////////////////////////////////////////////////////

///.定单号必须是数字;设定单号为:65612
///.定单号十六进制÷0D1的余数转换为十进制作为注册码的第一部分(1~3位);
    65612转换为十六进制=1004C;1004C÷0D1=139……C3;C3转换为十进制=195;
///.定单号的十六进制数与0B25F1进行异或运算,运算得出的结果转换为十进制;
    xor 1004C,0B25F1=A25BD;A25BD转换为十进制=665021;设665021为Sn1;
    Sn1.X代表Sn.1的第X位;
    (Sn1.1 + Sn1.2)÷5=[商.1] + [余数.1];[余数.1] + 34 = 37(7);
    (Sn1.3 + Sn1.4)÷5=[商.2] + [余数.2];[余数.2] + 33 = 34(4);
    上面得出的字符跟Sn1连接起来=66502174;
///.66502174的十六进制数与DDFB7687进行异或运算,运算得出的结果转换为十进制;
    66502174转换为十六进制=3F6BE1E;
    xor 3F6BE1E, DDFB7687=DE0DC899;DE0DC899转换为十进制=3725445273;设3725445273为Sn2;
    Sn2.Y代表Sn.1的第Y位;
    (Sn2.1 + Sn2.2)÷5=[商.3] + [余数.3];[余数.3] + 66 = 67(g);
    (Sn2.3 + Sn2.4)÷5=[商.4] + [余数.4];[余数.4] + 75 = 78(x);
    (Sn2.5 + Sn2.6)÷5=[商.5] + [余数.5];[余数.5] + 7A = 7E(~);
    [(Sn2.7 + Sn2.8) + Sn2.9]÷5=[商.6] + [余数.6];[余数.6] + 69 = 6C(l);
    将上面得出的字符与Sn2组合=37l2x544~g5273;组合后的字符串作为注册码的第二部分(4~17位);
///.注册码第三部分固定“!”(18位);
///.将三部分字符串组合起来即可得出注册码19537l2x544~g5273!
///.一组可以显示注册成功的注册码:

    定单号:65612
    注册码:19537l2x544~g5273!

经过昨天的教训,想着Nisy主讲的软件应该不是特别简单,软件本身肯定有猫腻之处^_^,昨天的那个软件我虽然可以
注册成功,也分析出自认为正确的算法,但是不能成功的将图片转换为图标文件-_-!,今天这个精装友情通讯录按照
上面的分析得出的注册码可以临时注册成功,重启的话还是会显示“软件未注册”,不知道是怎么回事了,按照我以前
的想法,爆破的话若修改的不是关键位置重启验证部分过不了关可能只是表面上显示注册成功,而软件的功能限制可能
未全部解除,输入注册码正确的话一般都会解除功能限制,记得以前分析考试宝典的时候那个软件是追出注册码以后重
新安装软件输入注册码即可解开题库,今天调试的这个程序就不行,不知道该怎么办了,期待能加入第十轮教学找出问
题的答案,进一步提高自己的水平^_^

///.后续爆破:

打开C32Asm查找字符串开始爆破:

::00511739::BA F81A5100            MOV EDX,511AF8   \->: 精装友情-软件未注册
::005147FC::BA 144C5100            MOV EDX,514C14   \->: 精装友情-软件未注册

::0051056D::BA F4065100            MOV EDX,5106F4   \->: 精装友情-软件已注册
::0051481B::BA 304C5100            MOV EDX,514C30   \->: 精装友情-软件已注册

::00511745::B8 141B5100            MOV EAX,511B14   \->: 软件未注册,功能限制。\x0D\x0A\x0D\x0A请及时注册软件!
//////////////////////////////////////////////////////////////////////////////////////////////////////////
005147E0|.E8 734DEFFF   call    00409558                         ;//进去修改标志位
005147E5|.84C0          test    al, al
005147E7|.75 1F         jnz   short 00514808
005147E9|.8B83 18030000 mov   eax, dword ptr
005147EF|.8B80 08020000 mov   eax, dword ptr
005147F5|.33D2          xor   edx, edx
005147F7|.E8 F8A9F5FF   call    0046F1F4
005147FC|.BA 144C5100   mov   edx, 00514C14                  ;\->: 精装友情-软件未注册
00514801|.E8 4AA9F5FF   call    0046F150
00514806|.EB 1D         jmp   short 00514825
00514808|>8B83 18030000 mov   eax, dword ptr
0051480E|.8B80 08020000 mov   eax, dword ptr
00514814|.33D2          xor   edx, edx
00514816|.E8 D9A9F5FF   call    0046F1F4
0051481B|.BA 304C5100   mov   edx, 00514C30                  ;\->: 精装友情-软件已注册
00514820|.E8 2BA9F5FF   call    0046F150
//////////////////////////////////////////////////////////////////////////////////////////////////////////
00409558/$53            push    ebx
00409559|.8BD8          mov   ebx, eax
0040955B|.8BC3          mov   eax, ebx
0040955D|.E8 8EFFFFFF   call    004094F0
00409562|.40            inc   eax
00409563|.0F95C0      setne   al                               ;//将这里改为sete,谢谢N大在标志位爆破SPX对setne的讲解
00409566|.5B            pop   ebx
00409567\.C3            retn
//////////////////////////////////////////////////////////////////////////////////////////////////////////
00511743|. /75 0F         jnz   short 00511754               ;//将这里改为无条件跳转Jmp,以防万一^_^
00511745|. |B8 141B5100   mov   eax, 00511B14                ;\->: 软件未注册,功能限制。\x0D\x0A\x0D\x0A请及时注册软件!
0051174A|. |E8 D58AF2FF   call    0043A224
0051174F|. |E9 4D030000   jmp   00511AA1

感觉现在应该算是破解了,不知道程序还有什么暗桩没有-_-!

胜利截图:


tianxj 发表于 2010-5-30 10:40:11

支持预习!!

樊盟 发表于 2010-5-30 10:42:45

回复 2# tianxj
继续努力ing……:victory:

Nisy 发表于 2010-5-30 11:58:16

不错不错 ~ 两篇都送精华了~~

nuojiya8 发表于 2010-5-30 11:59:43

好帖子。支持了。

whypro 发表于 2010-5-30 12:07:39

赶快过来膜拜!好帖!支持!

十年瞬逝 发表于 2010-5-30 12:53:33

分析的真透彻,学习了

月之精灵 发表于 2010-5-30 13:09:27

进来学习下,

whdl 发表于 2010-5-30 13:15:36

进来学习下,
哎呀。楼主咋学习的呀,那么厉害。

这些代码,对我来说,看了就头痛,硬着头皮看汇编的代码,真难啊。
多谢楼主的好文章了。

·.χiㄡ欠 发表于 2010-5-30 13:15:59

不错哦!
有点看不懂
好好学习!
页: [1] 2
查看完整版本: 分析主讲软件第二篇:精装友情通讯录算法分析 By:yAtEs 2010.5.30