F8LEFT 发表于 2014-9-17 21:34:34

石子店铺帐本(记账软件)算法分析

本帖最后由 F8LEFT 于 2014-9-18 23:33 编辑

【破文标题】石子店铺帐本(记账软件)算法分析
【破文作者】F8LEFT
【破文邮箱】[email protected]
【作者主页】就快有的了
【破解工具】OllyDbg
【破解平台】WinXp32
【软件名称】石子店铺帐本
【软件大小】17.6
【来源地址】自行搜索下载
【保护方式】注册码
【软件简介】
   这是一款小型店铺记帐软件。功能简单、实用!只需要您动动鼠标,敲几个数字就可以轻松完成账务的录入、查询和统计。
    适用于有进销存需求的店铺记帐。
主要功能:
    1、进销记录:对进销商品的数量、金额进行添加、修改、删除、查询。
    2、库存余量:对同一商品在某时间段内的进货数量、销售数量以及库存量进行统计。
    3、盈利情况:对同一商品在某时间段内的销售金额、进货金额以及盈利金额进行统计。
    4、图表分析:对某时间段内所有商品的销售金额,按月或年以直方图或曲线图的方式直观的显示出来。
    5、通讯录:可记录联系人的详尽联系方式。


----------------------------------------------
【破解声明】    仅供学习与交流之用,请不要用于商业用途。
----------------------------------------------

【破解过程】
    该软件失败有MessageBoxA的错误提示,所以直接从bp MessageBoxA就可以插入了。

00410DC0   .6A FF         PUSH    -0x1                                          ;注册开始
00410DC2   .68 28784300   PUSH    石子店铺.00437828                               ;SE 处理程
00410DC7   .64:A1 0000000>MOV   EAX, DWORD PTR FS:
00410DCD   .50            PUSH    EAX
......中间省略取注册框信息的代码。
00410EBB   .51            PUSH    ECX                                                 ;框4
00410EBC   .8B0D DC214500 MOV   ECX, DWORD PTR DS:
00410EC2   .52            PUSH    EDX                                                 ;框3
00410EC3   .50            PUSH    EAX                                                 ;框2
00410EC4   .51            PUSH    ECX                                                 ;框1
00410EC5   .8D5424 28   LEA   EDX, DWORD PTR SS:
00410EC9   .68 68EC4400   PUSH    石子店铺.0044EC68                                       ;ASCII "%s%s%s%s"
00410ECE   .52            PUSH    EDX                                                 ;Buffer
00410ECF   .C74424 68 010>MOV   DWORD PTR SS:, 0x1
00410ED7   .E8 B22C0200   CALL    <JMP.&MFC42.#CString::Format_2818>                  ;链接注册码
00410EDC   .83C4 14       ADD   ESP, 0x14
00410EDF   .8D4424 1C   LEA   EAX, DWORD PTR SS:
00410EE3   .8BCC          MOV   ECX, ESP
00410EE5   .896424 20   MOV   DWORD PTR SS:, ESP
00410EE9   .50            PUSH    EAX                                                 ;CString Code
00410EEA   .E8 AB2C0200   CALL    <JMP.&MFC42.#CString::CString_535>
00410EEF   .E8 ACF6FFFF   CALL    <石子店铺.Verify_Key>                                 ;验证注册码的正确性
00410EF4   .83C4 04       ADD   ESP, 0x4
00410EF7   .85C0          TEST    EAX, EAX
00410EF9      0F84 B5010000 JE      石子店铺.004110B4                                       ;判断



   非常典型的注册判断地址,跟进关键的call Verify_Key去看
004105A0 >    6A FF         PUSH    -0x1
004105A2      68 EF764300   PUSH    石子店铺.004376EF                                       ;入口地址
004105A7|.64:A1 0000000>MOV   EAX, DWORD PTR FS:
004105AD|.50            PUSH    EAX
004105AE|.64:8925 00000>MOV   DWORD PTR FS:, ESP
004105B5|.81EC 4C030000 SUB   ESP, 0x34C
004105BB|.56            PUSH    ESI
004105BC|.57            PUSH    EDI
004105BD|.8D4C24 08   LEA   ECX, DWORD PTR SS:
004105C1|.C78424 5C0300>MOV   DWORD PTR SS:, 0x0
004105CC|.E8 33350200   CALL    <JMP.&MFC42.#CString::CString_540>                  ;new CString
004105D1|.8D8C24 5C0100>LEA   ECX, DWORD PTR SS:
004105D8|.C68424 5C0300>MOV   BYTE PTR SS:, 0x1
004105E0|.E8 2B47FFFF   CALL    <石子店铺.C_InitBuf>                                    ;初始化存放大数的buff(1)
004105E5|.8D8C24 B40000>LEA   ECX, DWORD PTR SS:
004105EC|.C68424 5C0300>MOV   BYTE PTR SS:, 0x2
004105F4|.E8 1747FFFF   CALL    <石子店铺.C_InitBuf>                                    ;初始化Buffer(2)
004105F9|.8D4C24 0C   LEA   ECX, DWORD PTR SS:
004105FD|.C68424 5C0300>MOV   BYTE PTR SS:, 0x3
00410605|.E8 0647FFFF   CALL    <石子店铺.C_InitBuf>                                    ;初始化Buffer(3)
0041060A|.8D8C24 040200>LEA   ECX, DWORD PTR SS:
00410611|.C68424 5C0300>MOV   BYTE PTR SS:, 0x4
00410619|.E8 F246FFFF   CALL    <石子店铺.C_InitBuf>                                    ;初始化Buffer(4)
0041061E|.8D8424 640300>LEA   EAX, DWORD PTR SS:
00410625|.6A 0A         PUSH    0xA
00410627|.50            PUSH    EAX                                                 ;push Pass
00410628|.8D4C24 14   LEA   ECX, DWORD PTR SS:                        ;存放大数的 Buffer(0)
0041062C|.C68424 640300>MOV   BYTE PTR SS:, 0x5
00410634|.E8 0753FFFF   CALL    <石子店铺.DecToHex>                                     ;注册码 十进制转十六进制
00410639|.68 E8EB4400   PUSH    石子店铺.0044EBE8                                       ;ASCII "1433"循环次数
0041063E|.8D4C24 0C   LEA   ECX, DWORD PTR SS:
00410642|.68 34E94400   PUSH    石子店铺.0044E934                                       ;ASCII "%s"
00410647|.51            PUSH    ECX
00410648|.E8 41350200   CALL    <JMP.&MFC42.#CString::Format_2818>                  ;format 1433
0041064D|.83C4 0C       ADD   ESP, 0xC
00410650|.8D5424 08   LEA   EDX, DWORD PTR SS:                         ;Str 1433
00410654|.8D8C24 5C0100>LEA   ECX, DWORD PTR SS:                     ;存放大数的 Buffer(1)
0041065B|.6A 0A         PUSH    0xA
0041065D|.52            PUSH    EDX
0041065E|.E8 DD52FFFF   CALL    <石子店铺.DecToHex>                                     ;1433 转16进制
00410663|.68 C4EB4400   PUSH    石子店铺.0044EBC4                                       ;ASCII "14739049012400727199316597861741" StaticKey
00410668|.8D4424 0C   LEA   EAX, DWORD PTR SS:
0041066C|.68 34E94400   PUSH    石子店铺.0044E934                                       ;ASCII "%s"
00410671|.50            PUSH    EAX
00410672|.E8 17350200   CALL    <JMP.&MFC42.#CString::Format_2818>
00410677|.83C4 0C       ADD   ESP, 0xC
0041067A|.8D4C24 08   LEA   ECX, DWORD PTR SS:
0041067E|.6A 0A         PUSH    0xA
00410680|.51            PUSH    ECX
00410681|.8D8C24 BC0000>LEA   ECX, DWORD PTR SS:                        ;存放大数的 Buffer(2)
00410688|.E8 B352FFFF   CALL    <石子店铺.DecToHex>                                     ;147。。。转16进制
0041068D|.8D9424 B40000>LEA   EDX, DWORD PTR SS:
00410694|.8D8424 5C0100>LEA   EAX, DWORD PTR SS:
0041069B|.52            PUSH    EDX                                                 ;Hex(14739049012400727199316597861741)
0041069C|.8D8C24 B00200>LEA   ECX, DWORD PTR SS:
004106A3|.50            PUSH    EAX                                                 ;Hex(1433)
004106A4|.51            PUSH    ECX                                                 ;??14
004106A5|.8D4C24 18   LEA   ECX, DWORD PTR SS:                        ;Hex(Pass)
004106A9|.E8 0254FFFF   CALL    <石子店铺.End_Data>                                     ;计算出最终结果
004106AE|.B9 2A000000   MOV   ECX, 0x2A
004106B3|.8BF0          MOV   ESI, EAX
004106B5|.8DBC24 040200>LEA   EDI, DWORD PTR SS:
004106BC|.F3:A5         REP   MOVS DWORD PTR ES:, DWORD PTR DS:         ;复制数据
004106BE|.8D8C24 AC0200>LEA   ECX, DWORD PTR SS:
004106C5|.E8 666D0000   CALL    <石子店铺.nop>
004106CA|.8D5424 08   LEA   EDX, DWORD PTR SS:
004106CE|.6A 0A         PUSH    0xA
004106D0|.52            PUSH    EDX
004106D1|.8D8C24 0C0200>LEA   ECX, DWORD PTR SS:
004106D8|.E8 F352FFFF   CALL    <石子店铺.HexToDec>                                     ;把上面计算的结果翻译为10进制字符串
004106DD|.A1 CC214500   MOV   EAX, DWORD PTR DS:
004106E2|.50            PUSH    EAX                                                 ; /s2 => "70799146"
004106E3|.8B4424 0C   MOV   EAX, DWORD PTR SS:                         ; |
004106E7|.50            PUSH    EAX                                                 ; |s1
004106E8|.FF15 C4D64300 CALL    NEAR DWORD PTR DS:[<&MSVCRT._mbscmp>]               ; \与 70799146 比较 (软件编号)
004106EE|.83C4 08       ADD   ESP, 0x8
004106F1|.C68424 5C0300>MOV   BYTE PTR SS:, 0x4
004106F9|.85C0          TEST    EAX, EAX
004106FB|.5F            POP   EDI
004106FC|.5E            POP   ESI
004106FD|.8D8C24 FC0100>LEA   ECX, DWORD PTR SS:
00410704|.0F85 80000000 JNZ   石子店铺.0041078A



    一层层深入,这里它进行了3个大数的初始化,分别是我输入的Pass,1433,以及 14739049012400727199316597861741。然后就进入下一轮的计算。计算得到的结果再与 70799146 进行比较,相等的话就是注册成功。

    下面给出End_Data的主要计算代码:
00405B3E|> /8B4424 14   /MOV   EAX, DWORD PTR SS:
00405B42|. |3BC3          |CMP   EAX, EBX
00405B44|. |8B4424 18   |MOV   EAX, DWORD PTR SS:                     ;Hex(1433) LoopTime
00405B48|. |75 08         |JNZ   SHORT 石子店铺.00405B52
00405B4A|. |3BC7          |CMP   EAX, EDI
00405B4C|. |0F84 29010000 |JE      石子店铺.00405C7B
00405B52|> |84C3          |TEST    BL, AL                                             ;检查LoopTime是否为奇数
00405B54|. |0F84 90000000 |JE      石子店铺.00405BEA
00405B5A|. |8D8C24 080200>|LEA   ECX, DWORD PTR SS:
00405B61|. |53            |PUSH    EBX
00405B62|. |51            |PUSH    ECX
00405B63|. |8D4C24 18   |LEA   ECX, DWORD PTR SS:
00405B67|. |E8 54F6FFFF   |CALL    <石子店铺.BigNum::-->                                  ;   --->LoopTime--
00405B6C|. |50            |PUSH    EAX
00405B6D|. |8D4C24 14   |LEA   ECX, DWORD PTR SS:
00405B71|. |E8 0AF2FFFF   |CALL    <石子店铺.BufCpy>
00405B76|. |8D8C24 080200>|LEA   ECX, DWORD PTR SS:
00405B7D|. |E8 AE180100   |CALL    <石子店铺.nop>
00405B82|. |8D9424 B80000>|LEA   EDX, DWORD PTR SS:
00405B89|. |8D8424 580300>|LEA   EAX, DWORD PTR SS:
00405B90|. |52            |PUSH    EDX                                                ;Hex(Pass)
00405B91|. |50            |PUSH    EAX                                                ;ResultBuf
00405B92|. |8D8C24 680100>|LEA   ECX, DWORD PTR SS:                      ;Hex(Result)
00405B99|. |E8 42F7FFFF   |CALL    <石子店铺.BigNum::*>                                 ;   --->Result1 *= Pass
00405B9E|. |50            |PUSH    EAX                                                ;Hex(Result)
00405B9F|. |8D8C24 640100>|LEA   ECX, DWORD PTR SS:
00405BA6|. |E8 D5F1FFFF   |CALL    <石子店铺.BufCpy>
00405BAB|. |8D8C24 580300>|LEA   ECX, DWORD PTR SS:
00405BB2|. |E8 79180100   |CALL    <石子店铺.nop>
00405BB7|. |8D8C24 A80400>|LEA   ECX, DWORD PTR SS:
00405BBE|. |56            |PUSH    ESI                                                ;Hex(14739049012400727199316597861741)
00405BBF|. |51            |PUSH    ECX                                                ;ResultBuf
00405BC0|. |8D8C24 680100>|LEA   ECX, DWORD PTR SS:                      ;Hex(Result)
00405BC7|. |E8 C4FAFFFF   |CALL    <石子店铺.BigNum::%>                                 ;    ---》 Result %= StaticKey
00405BCC|. |50            |PUSH    EAX
00405BCD|. |8D8C24 640100>|LEA   ECX, DWORD PTR SS:
00405BD4|. |E8 A7F1FFFF   |CALL    <石子店铺.BufCpy>
00405BD9|. |8D8C24 A80400>|LEA   ECX, DWORD PTR SS:
00405BE0|. |E8 4B180100   |CALL    <石子店铺.nop>
00405BE5|.^ E9 54FFFFFF   |JMP   石子店铺.00405B3E
00405BEA|> |8D9424 B00200>|LEA   EDX, DWORD PTR SS:
00405BF1|. |6A 02         |PUSH    0x2                                                ;2
00405BF3|. |52            |PUSH    EDX                                                ;ResultBuf
00405BF4|. |8D4C24 18   |LEA   ECX, DWORD PTR SS:                     ;Hex(LoopTime)
00405BF8|. |E8 A3F9FFFF   |CALL    <石子店铺.BigNum::/>                                 ;   --->Loop Time /= 2
00405BFD|. |50            |PUSH    EAX
00405BFE|. |8D4C24 14   |LEA   ECX, DWORD PTR SS:
00405C02|. |E8 79F1FFFF   |CALL    <石子店铺.BufCpy>
00405C07|. |8D8C24 B00200>|LEA   ECX, DWORD PTR SS:
00405C0E|. |E8 1D180100   |CALL    <石子店铺.nop>
00405C13|. |8D8424 B80000>|LEA   EAX, DWORD PTR SS:
00405C1A|. |8D8C24 000400>|LEA   ECX, DWORD PTR SS:
00405C21|. |50            |PUSH    EAX                                                ;Hex(Pass)
00405C22|. |51            |PUSH    ECX                                                ;ResultBuf
00405C23|. |8D8C24 C00000>|LEA   ECX, DWORD PTR SS:                     ;Hex(Pass)
00405C2A|. |E8 B1F6FFFF   |CALL    <石子店铺.BigNum::*>                                 ;    ---》 Pass *= Pass
00405C2F|. |50            |PUSH    EAX
00405C30|. |8D8C24 BC0000>|LEA   ECX, DWORD PTR SS:                     ;更新Pass
00405C37|. |E8 44F1FFFF   |CALL    <石子店铺.BufCpy>
00405C3C|. |8D8C24 000400>|LEA   ECX, DWORD PTR SS:
00405C43|. |E8 E8170100   |CALL    <石子店铺.nop>
00405C48|. |8D9424 500500>|LEA   EDX, DWORD PTR SS:
00405C4F|. |56            |PUSH    ESI                                                ;Hex(14739049012400727199316597861741)
00405C50|. |52            |PUSH    EDX
00405C51|. |8D8C24 C00000>|LEA   ECX, DWORD PTR SS:                     ;Hes(Pass)
00405C58|. |E8 33FAFFFF   |CALL    <石子店铺.BigNum::%>                                 ;   ---》 Pass %= Key
00405C5D|. |50            |PUSH    EAX
00405C5E|. |8D8C24 BC0000>|LEA   ECX, DWORD PTR SS:
00405C65|. |E8 16F1FFFF   |CALL    <石子店铺.BufCpy>
00405C6A|. |8D8C24 500500>|LEA   ECX, DWORD PTR SS:
00405C71|. |E8 BA170100   |CALL    <石子店铺.nop>
00405C76|.^\E9 C3FEFFFF   \JMP   石子店铺.00405B3E



   看起来很长,实际上翻译为C代码就只有几行:BigNum StaticKey = 14739049012400727199316597861741; (奇数)
BigNum LoopTime = 1433;
BigNum Pass;
BigNum Result1 = 1;
BigNum VolumnInfo;                                //机器码
while (LoopTime) {
   if(LoopTime % 2 != 0) {                //奇数
              LoopTime--;
      Result *= Pass;
      Result %= StaticKey;            ==偶数
   } else {                               //偶数
      LoopTime /= 2;
      Pass *= Pass;
      Pass %= StaticKey;
   }
}
if(Result == VolumnInfo)
    success;







   代码这样就出来了,该干啥的就干啥。破解的方法多得去了,这里就不提及了。

【破解总结】
    本来想找一个软件来练练手,保持一下手感的。结果打开一看,瞬时蒙了。大家别喷,我是第一次遇到有大数运算的程序,所以一时间不知道它在干啥。有兴趣的还请来玩玩吧。

【版权声明】      本文有F8LEFT原创于PYG,转载请注明作者与出处。




左岸麦田 发表于 2014-9-17 21:59:48

不错,提醒楼主最好不要明文自己的Q EMAIL,感谢。

F8LEFT 发表于 2014-9-18 00:21:23

左岸麦田 发表于 2014-9-17 21:59
不错,提醒楼主最好不要明文自己的Q EMAIL,感谢。

哦,感谢提醒

一米阳光 发表于 2014-9-18 02:43:57

s虽然看不懂但还是支持一下

cjteam 发表于 2014-9-18 08:44:12

不错支持分析

Dxer 发表于 2014-9-18 10:30:45

谢谢您的分析算法文章

theend 发表于 2014-9-18 11:04:11

感谢F8大婶,学习了,有时间自己实践一下{:handshake:}

sndncel 发表于 2014-9-18 14:13:25

{:lol:},谢谢楼主分享呀。学习了呀。呵呵。

Nisy 发表于 2014-9-18 17:59:53

赞 ~!

Nisy 发表于 2014-9-18 18:00:07

赞 ~!
页: [1] 2
查看完整版本: 石子店铺帐本(记账软件)算法分析