分析主讲软件第二篇:精装友情通讯录算法分析 By:yAtEs 2010.5.30
分析主讲软件第二篇:精装友情通讯录算法分析 By:yAtEs 2010.5.30Borland 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
感觉现在应该算是破解了,不知道程序还有什么暗桩没有-_-!
胜利截图:
支持预习!! 回复 2# tianxj
继续努力ing……:victory: 不错不错 ~ 两篇都送精华了~~ 好帖子。支持了。 赶快过来膜拜!好帖!支持! 分析的真透彻,学习了 进来学习下, 进来学习下,
哎呀。楼主咋学习的呀,那么厉害。
这些代码,对我来说,看了就头痛,硬着头皮看汇编的代码,真难啊。
多谢楼主的好文章了。 不错哦!
有点看不懂
好好学习!
页:
[1]
2