邪恶八进制信息安全团队技术讨论组's Archiver

exploit 2005-9-21 08:15

[转载]一个收费管理软件简单算法分析

【破解日期】 9月19日
【破解作者】 冷血书生
【作者邮箱】 [email]colddoctor@126.com[/email]
【使用工具】 OD,PEID
【破解平台】 Win9x/NT/2000/XP
【软件名称】 锦航物业收费管理软件 1.0
【下载地址】 [url]http://nj.onlinedown.net/soft/42454.htm[/url]
【软件简介】  锦航物业收费管理系统是一套物业公司对业主收取电费、水费、维修费、清洁卫生费、治

安管理费等各种物业收费项目进行全面管理的系统。
  根据物业管理的要求,用户可以自行设定各种收费项目和计算公式,针对每个业主设定不同收费项目

及收费标准,可以复制上月的收费项目及数据到本月进行修改。该系统操作简单,功能齐全,对各项收费

项目进行分类统计与综合查询,能够打印出缴款单和各种报表,为物业收费管理提供了一个现代化的管理

手段,保持了各种数据的完整性、及时性和正确性,使企业完善了管理体系提高了管理水平。
【软件大小】 1805KB

【加壳方式】 没
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】


   
  PEID检测没壳,软件用Borland Delphi 6.0 - 7.0编写,OD载入,根据错误提示,来到下面

机器码:J64GTJ3HSH
试炼码:7878787878


  Quote:
005EB4D2   55          push ebp                         ; 下断
005EB4D3   68 25B65E00    push Main.005EB625
005EB4D8   64:FF30      push dword ptr fs:[eax]
005EB4DB   64:8920      mov dword ptr fs:[eax],esp
005EB4DE   8D45 F4      lea eax,dword ptr ss:[ebp-C]
005EB4E1   E8 F2F9FFFF    call Main.005EAED8
005EB4E6   8D45 EC      lea eax,dword ptr ss:[ebp-14]
005EB4E9   B9 3CB65E00    mov ecx,Main.005EB63C                ; ASCII "wygl"
005EB4EE   8B55 F4      mov edx,dword ptr ss:[ebp-C]
005EB4F1   E8 EA95E1FF    call Main.00404AE0
005EB4F6   8B45 EC      mov eax,dword ptr ss:[ebp-14]           ; J64GTJ3HSHwygl
005EB4F9   8D55 F0      lea edx,dword ptr ss:[ebp-10]
005EB4FC   E8 AFFAFFFF    call Main.005EAFB0                  ;算法CALL,跟进
005EB501   8D55 E4      lea edx,dword ptr ss:[ebp-1C]
005EB504   8B45 FC      mov eax,dword ptr ss:[ebp-4]
005EB507   8B80 08030000  mov eax,dword ptr ds:[eax+308]
005EB50D   E8 5E58E6FF    call Main.00450D70
005EB512   8B45 E4      mov eax,dword ptr ss:[ebp-1C]
005EB515   8D55 E8      lea edx,dword ptr ss:[ebp-18]
005EB518   E8 8BDFE1FF    call Main.004094A8                  
005EB51D   8B45 E8      mov eax,dword ptr ss:[ebp-18]         ; 假码
005EB520   8B55 F0      mov edx,dword ptr ss:[ebp-10]         ; 真码
005EB523   E8 B096E1FF    call Main.00404BD8                  ; 真假码比较,可做内存注册机
005EB528   74 2E        je short Main.005EB558                 ; 相等就注册成功,爆破点

*******************************  跟进 call Main.005EAFB0 ***********************************

005EAFB0   55          push ebp                         ;跟进来到这里
005EAFB1   8BEC        mov ebp,esp
005EAFB3   83C4 F4      add esp,-0C
005EAFB6   56          push esi
005EAFB7   33C9        xor ecx,ecx
005EAFB9   894D F4      mov dword ptr ss:[ebp-C],ecx
005EAFBC   8955 F8      mov dword ptr ss:[ebp-8],edx
005EAFBF   8945 FC      mov dword ptr ss:[ebp-4],eax
005EAFC2   8B45 FC      mov eax,dword ptr ss:[ebp-4]
005EAFC5   E8 B29CE1FF    call Main.00404C7C
005EAFCA   33C0        xor eax,eax
005EAFCC   55          push ebp
005EAFCD   68 C7B05E00    push Main.005EB0C7
005EAFD2   64:FF30      push dword ptr fs:[eax]
005EAFD5   64:8920      mov dword ptr fs:[eax],esp
005EAFD8   33F6        xor esi,esi
005EAFDA   8B45 FC      mov eax,dword ptr ss:[ebp-4]
005EAFDD   E8 B29AE1FF    call Main.00404A94
005EAFE2   8BD0        mov edx,eax
005EAFE4   85D2        test edx,edx
005EAFE6   7E 24        jle short Main.005EB00C
005EAFE8   B8 01000000    mov eax,1                        ; 1送EAX
005EAFED   8B4D FC      mov ecx,dword ptr ss:[ebp-4]
005EAFF0   8A4C01 FF     mov cl,byte ptr ds:[ecx+eax-1]      ; 依次取机器码ASCII值并送CL
005EAFF4   80F1 57      xor cl,57                           ; CL XOR 57
005EAFF7   81E1 FF000000  and ecx,0FF                      ; 值保存在ECX
005EAFFD   69C9 6C030000  imul ecx,ecx,36C                  ; ECX=ECX*36C
005EB003   0FAFC8       imul ecx,eax                        ; ECX=ECX*EAX
005EB006   03F1        add esi,ecx                          ; ESI=ESI+ECX,ESI初始为0
005EB008   40          inc eax                               ; EAX加1
005EB009   4A          dec edx                              ; 长度减1
005EB00A  ^ 75 E1        jnz short Main.005EAFED              ; 循环
005EB00C   8D55 F4      lea edx,dword ptr ss:[ebp-C]
005EB00F   8BC6        mov eax,esi
005EB011   E8 06E9E1FF    call Main.0040991C
005EB016   8B45 F4      mov eax,dword ptr ss:[ebp-C]            ; 3872796送EAX
005EB019   E8 769AE1FF    call Main.00404A94
005EB01E   83F8 07      cmp eax,7
005EB021   7F 0C        jg short Main.005EB02F
005EB023   74 3B        je short Main.005EB060
005EB025   83E8 05      sub eax,5
005EB028   74 12        je short Main.005EB03C
005EB02A   48          dec eax
005EB02B   74 21        je short Main.005EB04E
005EB02D   EB 62        jmp short Main.005EB091
005EB02F   83E8 08      sub eax,8
005EB032   74 3E        je short Main.005EB072
005EB034   48          dec eax
005EB035   83E8 5C      sub eax,5C
005EB038   72 4A        jb short Main.005EB084
005EB03A   EB 55        jmp short Main.005EB091
005EB03C   8D45 F4      lea eax,dword ptr ss:[ebp-C]
005EB03F   8B4D F4      mov ecx,dword ptr ss:[ebp-C]
005EB042   BA DCB05E00    mov edx,Main.005EB0DC                ; ASCII "8761"
005EB047   E8 949AE1FF    call Main.00404AE0
005EB04C   EB 50        jmp short Main.005EB09E
005EB04E   8D45 F4      lea eax,dword ptr ss:[ebp-C]
005EB051   8B4D F4      mov ecx,dword ptr ss:[ebp-C]
005EB054   BA ECB05E00    mov edx,Main.005EB0EC                ; ASCII "876"
005EB059   E8 829AE1FF    call Main.00404AE0
005EB05E   EB 3E        jmp short Main.005EB09E
005EB060   8D45 F4      lea eax,dword ptr ss:[ebp-C]
005EB063   8B4D F4      mov ecx,dword ptr ss:[ebp-C]
005EB066   BA F8B05E00    mov edx,Main.005EB0F8                ; ASCII "87"
005EB06B   E8 709AE1FF    call Main.00404AE0
005EB070   EB 2C        jmp short Main.005EB09E
005EB072   8D45 F4      lea eax,dword ptr ss:[ebp-C]
005EB075   8B4D F4      mov ecx,dword ptr ss:[ebp-C]
005EB078   BA 04B15E00    mov edx,Main.005EB104
005EB07D   E8 5E9AE1FF    call Main.00404AE0
005EB082   EB 1A        jmp short Main.005EB09E
005EB084   8D45 F4      lea eax,dword ptr ss:[ebp-C]
005EB087   8B55 F4      mov edx,dword ptr ss:[ebp-C]
005EB08A   E8 E597E1FF    call Main.00404874
005EB08F   EB 0D        jmp short Main.005EB09E
005EB091   8D45 F4      lea eax,dword ptr ss:[ebp-C]
005EB094   BA 10B15E00    mov edx,Main.005EB110                ; ASCII "333543469"
005EB099   E8 D697E1FF    call Main.00404874
005EB09E   8B45 F8      mov eax,dword ptr ss:[ebp-8]
005EB0A1   8B55 F4      mov edx,dword ptr ss:[ebp-C]            ; 87与3872796连接,组成注册码
005EB0A4   E8 8797E1FF    call Main.00404830
005EB0A9   33C0        xor eax,eax
005EB0AB   5A          pop edx
005EB0AC   59          pop ecx
005EB0AD   59          pop ecx
005EB0AE   64:8910      mov dword ptr fs:[eax],edx
005EB0B1   68 CEB05E00    push Main.005EB0CE
005EB0B6   8D45 F4      lea eax,dword ptr ss:[ebp-C]
005EB0B9   E8 1E97E1FF    call Main.004047DC
005EB0BE   8D45 FC      lea eax,dword ptr ss:[ebp-4]
005EB0C1   E8 1697E1FF    call Main.004047DC
005EB0C6   C3          retn



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

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


  Quote:
【算法总结】

(1)机器码与wygl连接,组成新字符串,记为A.
(2)[(A的ASCII值 XOR 57)*36C]*(1.2..到A的长度)累加,最后转换为十进制.
(3)如果(2)值的长度为7位,则87与(2)连接,即为注册码;
  如果(2)值的长度大于7位,则减去8,则所得即为注册码;
  如果(2)值的长度小于7位,则减去5,长度相等的话,则8761与(2)值连接,即为注册码;
  如果(2)值的长度小于7位,则减去5,长度不相等的话,就再减去1,长度相等的话,876与(2)连接,则即为注册码;
  如果(2)值的长度小于7位,则减去5,长度不相等的话,就再减去1,长度不相等的话,333543469与(2)值连接,则即为注册码.

--------------------------------------------------------------------------------
【内存注册机】

中断地址:5EB523
中断次数:1
第一字节:E8
指令长度:5
内存方式===》EDX===》指针1层
--------------------------------------------------------------------------------
【爆破地址】

005EB528   74 2E        je short Main.005EB558    ///  je =====>>> jne
--------------------------------------------------------------------------------
【破解总结】

  算法算是比较简单,如有不足之处,还请各位大侠指点!

烟花 2005-9-21 14:35

0061ADE0 M> $  55       push ebp

od载入后,停留在这地方,,如何跳到 005EB4D2  55      push ebp

页: [1]
© 1999-2008 EvilOctal Security Team