水中花 发表于 2007-3-21 14:22:13

《办公室收文登记 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、将以上所得的字母相连即为注册码

以上是菜鸟的分析,如果不对地方请大家多多指教!

--------------------------------------------------------------------------------

情天下雪 发表于 2007-3-21 17:56:41

学习了/:12 /:12 /:12 /:12

jasonliyi 发表于 2007-3-21 22:34:22

学习了/:02

bhcjl 发表于 2007-3-22 08:24:09

学习加收藏了

playboyjin 发表于 2007-3-22 09:26:46

我等菜鸟学习的好材料。。。

yunfeng 发表于 2007-3-22 09:30:14

文章分析的不错,是很好的学习教程。

爬爬虫 发表于 2007-4-17 07:08:04

认真学习了!

775825866 发表于 2007-5-25 19:03:25

学习中,算法还是不太懂

MayDay 发表于 2007-5-27 05:23:46

什么时候我也可以分析个算法?/:002

zsl01 发表于 2008-9-23 08:19:18

好好学习,不懂则要问,虽看看不懂,问的也太多了,先顶一个吧。
页: [1]
查看完整版本: 《办公室收文登记 1.0》算法分析