《办公室收文登记 1.0》算法分析
【文章标题】: 《办公室收文登记 1.0》算法分析【文章作者】: 水中花
【软件名称】: 办公室收文登记
【下载地址】: 自己搜索下载
【加壳方式】: UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
【编写语言】: Delphi
【使用工具】: OD
【操作平台】: xp+sp2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一、用UPX加的壳,手动脱壳,用PEiD查看,是Delphi编写,请出DeDe,找到注册模块。
二、下断在此处
0057142C/.55 push ebp
0057142D|.8BEC mov ebp, esp
0057142F|.33C9 xor ecx, ecx
00571431|.51 push ecx
00571432|.51 push ecx
00571433|.51 push ecx
00571434|.51 push ecx
00571435|.51 push ecx
00571436|.53 push ebx
00571437|.8BD8 mov ebx, eax
00571439|.33C0 xor eax, eax
0057143B|.55 push ebp
0057143C|.68 BE155700 push swdj_Unp.005715BE
00571441|.64:FF30 push dword ptr fs:
00571444|.64:8920 mov dword ptr fs:, esp
00571447|.8D55 FC lea edx, dword ptr
0057144A|.8B83 DC020000 mov eax, dword ptr
00571450|.E8 E78BECFF call swdj_Unp.0043A03C
00571455|.8B45 FC mov eax, dword ptr ;输入的假码
00571458|.50 push eax
00571459|.8D55 F4 lea edx, dword ptr
0057145C|.8B83 D8020000 mov eax, dword ptr
00571462|.E8 D58BECFF call swdj_Unp.0043A03C
00571467|.8B45 F4 mov eax, dword ptr ;机器码
0057146A|.8D4D F8 lea ecx, dword ptr
0057146D|.BA FF748200 mov edx, 8274FF ;固定值8274FF
00571472|.E8 6D28FFFF call swdj_Unp.00563CE4 ;算法关键处
00571477|.8B55 F8 mov edx, dword ptr ;出现真码
0057147A|.58 pop eax
0057147B|.E8 F82CE9FF call swdj_Unp.00404178 ;真假注册码比较
00571480|.74 22 je short swdj_Unp.005714A4 ;关键跳
00571482|.BA D4155700 mov edx, swdj_Unp.005715D4
00571487|.B8 E4155700 mov eax, swdj_Unp.005715E4
0057148C|.E8 672CFFFF call swdj_Unp.005640F8
00571491|.8B83 DC020000 mov eax, dword ptr
00571497|.8B10 mov edx, dword ptr
00571499|.FF92 B0000000 call dword ptr
0057149F|.E9 EF000000 jmp swdj_Unp.00571593
005714A4|>BA 14165700 mov edx, swdj_Unp.00571614
005714A9|.B8 24165700 mov eax, swdj_Unp.00571624
005714AE|.E8 452CFFFF call swdj_Unp.005640F8
005714B3|.BA 48165700 mov edx, swdj_Unp.00571648
005714B8|.8BC3 mov eax, ebx
005714BA|.E8 AD8BECFF call swdj_Unp.0043A06C
跟进算法0057147B|.E8 F82CE9FF call swdj_Unp.00404178处
00563CE4/$55 push ebp
00563CE5|.8BEC mov ebp, esp
00563CE7|.6A 00 push 0
00563CE9|.6A 00 push 0
00563CEB|.6A 00 push 0
00563CED|.6A 00 push 0
00563CEF|.6A 00 push 0
00563CF1|.53 push ebx
00563CF2|.56 push esi
00563CF3|.57 push edi
00563CF4|.8BF9 mov edi, ecx
00563CF6|.8BDA mov ebx, edx
00563CF8|.8BF0 mov esi, eax ;机器码存入esi中
00563CFA|.33C0 xor eax, eax ;清零
00563CFC|.55 push ebp
00563CFD|.68 F83D5600 push swdj_Unp.00563DF8
00563D02|.64:FF30 push dword ptr fs:
00563D05|.64:8920 mov dword ptr fs:, esp
00563D08|.8D45 F4 lea eax, dword ptr
00563D0B|.8BD6 mov edx, esi
00563D0D|.E8 6E01EAFF call swdj_Unp.00403E80
00563D12|.895D F8 mov dword ptr , ebx
00563D15|.8BC7 mov eax, edi
00563D17|.8B55 F4 mov edx, dword ptr ;机器码
00563D1A|.E8 1D01EAFF call swdj_Unp.00403E3C
00563D1F|.8B45 F4 mov eax, dword ptr
00563D22|.E8 4103EAFF call swdj_Unp.00404068 ;取机器码的长度
00563D27|.8BF0 mov esi, eax
00563D29|.85F6 test esi, esi
00563D2B|.7E 3B jle short swdj_Unp.00563D68
00563D2D|.BB 01000000 mov ebx, 1
00563D32|>8BC7 /mov eax, edi ;机器码存入eax
00563D34|.E8 FF04EAFF |call swdj_Unp.00404238
00563D39|.8B55 F4 |mov edx, dword ptr ;机器码
00563D3C|.8A541A FF |mov dl, byte ptr ;依次取机器码
00563D40|.8B4D F8 |mov ecx, dword ptr ;初值为8274FF
00563D43|.C1E9 08 |shr ecx, 8 ;逻辑右移8位
00563D46|.32D1 |xor dl, cl ;低位异或
00563D48|.885418 FF |mov byte ptr , dl ;低位存入中
00563D4C|.8B07 |mov eax, dword ptr ;变形后的机器码
00563D4E|.0FB64418 FF |movzx eax, byte ptr
00563D53|.0345 F8 |add eax, dword ptr ;低位异或后 add (初值为8274FF)
00563D56|.69C0 D5DD0000 |imul eax, eax, 0DDD5 ;乘以固定串“0DDD5”
00563D5C|.05 8BD50000 |add eax, 0D58B ;加上固定串“0D58B”
00563D61|.8945 F8 |mov dword ptr , eax ;存入
00563D64|.43 |inc ebx ;计数器加1
00563D65|.4E |dec esi
00563D66|.^ 75 CA \jnz short swdj_Unp.00563D32
00563D68|>8D45 F4 lea eax, dword ptr ;机器码
00563D6B|.8B17 mov edx, dword ptr
00563D6D|.E8 0E01EAFF call swdj_Unp.00403E80
00563D72|.8BC7 mov eax, edi
00563D74|.E8 6F00EAFF call swdj_Unp.00403DE8
00563D79|.8B45 F4 mov eax, dword ptr
00563D7C|.E8 E702EAFF call swdj_Unp.00404068
00563D81|.8BF0 mov esi, eax
00563D83|.85F6 test esi, esi
00563D85|.7E 56 jle short swdj_Unp.00563DDD
00563D87|.BB 01000000 mov ebx, 1
00563D8C|>8B45 F4 /mov eax, dword ptr ;变形后的机器码地址
00563D8F|.0FB64418 FF |movzx eax, byte ptr ;依次取变形后的机器码
00563D94|.8945 FC |mov dword ptr , eax 存入中
00563D97|.FF37 |push dword ptr
00563D99|.8B45 FC |mov eax, dword ptr
00563D9C|.B9 1A000000 |mov ecx, 1A ;1A为固定值
00563DA1|.99 |cdq ;符号扩展
00563DA2|.F7F9 |idiv ecx ;带符号数除法
00563DA4|.8BD0 |mov edx, eax ;商值赋给edx
00563DA6|.80C2 41 |add dl, 41 ;商转换为大写字母
00563DA9|.8D45 F0 |lea eax, dword ptr
00563DAC|.E8 DF01EAFF |call swdj_Unp.00403F90
00563DB1|.FF75 F0 |push dword ptr
00563DB4|.8B45 FC |mov eax, dword ptr
00563DB7|.B9 1A000000 |mov ecx, 1A
00563DBC|.99 |cdq
00563DBD|.F7F9 |idiv ecx ;带符号数除法
00563DBF|.80C2 41 |add dl, 41 ;余数转换为大写字母
00563DC2|.8D45 EC |lea eax, dword ptr
00563DC5|.E8 C601EAFF |call swdj_Unp.00403F90
00563DCA|.FF75 EC |push dword ptr
00563DCD|.8BC7 |mov eax, edi
00563DCF|.BA 03000000 |mov edx, 3
00563DD4|.E8 4F03EAFF |call swdj_Unp.00404128
00563DD9|.43 |inc ebx
00563DDA|.4E |dec esi
00563DDB|.^ 75 AF \jnz short swdj_Unp.00563D8C 循环操作
00563DDD|>33C0 xor eax, eax
00563DDF|.5A pop edx
00563DE0|.59 pop ecx
00563DE1|.59 pop ecx
00563DE2|.64:8910 mov dword ptr fs:, edx
00563DE5|.68 FF3D5600 push swdj_Unp.00563DFF
00563DEA|>8D45 EC lea eax, dword ptr
00563DED|.BA 03000000 mov edx, 3
00563DF2|.E8 1500EAFF call swdj_Unp.00403E0C
00563DF7\.C3 retn
00563DF8 .- E9 67FAE9FF jmp swdj_Unp.00403864
00563DFD .^ EB EB jmp short swdj_Unp.00563DEA
00563DFF .5F pop edi
00563E00 .5E pop esi
00563E01 .5B pop ebx
00563E02 .8BE5 mov esp, ebp
00563E04 .5D pop ebp
00563E05 .C3 retn
--------------------------------------------------------------------------------
【经验总结】
该软件的注册算法大致如下:
1、将机器码依次与一数据进行异或
2、将变形后的机器码依次与1A相除,分别取商和余数,并将两数化为大写字母
3、将以上所得的字母相连即为注册码
以上是菜鸟的分析,如果不对地方请大家多多指教!
-------------------------------------------------------------------------------- 学习了/:12 /:12 /:12 /:12 学习了/:02 学习加收藏了 我等菜鸟学习的好材料。。。 文章分析的不错,是很好的学习教程。 认真学习了! 学习中,算法还是不太懂 什么时候我也可以分析个算法?/:002 好好学习,不懂则要问,虽看看不懂,问的也太多了,先顶一个吧。
页:
[1]