瑞鲁手机APP下载网_专注推荐好用的手机APP和游戏APP

v1.23 广告条破解法 算法分析

书香门第 V1.23 Build 1638 算法分析

查看人次:2摘自:瑞鲁手机APP

书香门第 V1.23 Build 1638

软件大小:  665 KB软件语言:  简体中文软件类别:  国产软件 / 共享版 / 电子阅读应用平台:  Win9x/NT/2000/XP界面预览:  加入时间:  2003-03-13 08:28:43下载次数:  7419推荐等级:  

联 系 人:  [email protected]  开 发 商:  http://www.gentle-breeze.com

软件介绍:   《书香门第》是一款适合于真正读书迷的电子小说、文本阅读软件,它外表并不花哨,但对于长时间、大量阅读的读书迷,却最舒适、体贴、细致,因为它具有十二个鲜明特点:1. 多达27种各种质感的窗口背景、页面背景可供选择,总共超过700种背景组合,为读书迷提供最高舒适度和最大程度的视力保护。2. 强大、智能化的自动排版功能,并可以随意设定字体大小、颜色、行距、标题行。3. 极其高速的排版速度:目前主流机器上排版速度超过一万页/秒,所以通常你根本无法感觉到排版过程。4. 高速的DirectDraw图形引擎,翻页寻迹流畅自如。5.附带的html转换、合成工具能够迅速依次将一批html文件转换且合并为一个大的文本文件,方便阅读。6.宽广的平台适用性:从486/win95到最新P4/XP都能从容应对。7.体贴的左手键操作,使你从此摆脱长期右手操作鼠标、键盘带来的疲劳。8.与页面字数成正比的自动翻页间隔,自然优于呆板的固定翻页间隔。9.可以选择使用窗口模式(寻迹方便)或全屏幕模式(阅读效果更好)。10.全书遍历/测试功能,保护你的计算机,节约能源。11.搜索功能方便读者在书中查找。12. 具有强于word和IE的汉字乱码纠错功能。

【作者声明】:本人是个初学者,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!            本人感谢软件作者,请见谅了.【破解工具】:0llydbg v1.09cn  W32Dasm8.93黄金版

————————————————————————————————— 【过    程】:

W32Dasm8.93黄金版反汇编,查找关键提示。

0040373C E81A6C0100              call 0041A35B:00403741 83F818                  cmp eax, 00000018                                 ====>注册码是否24位

:00403744 0F85C0000000            jne 0040380A                               :0040374A A1280E4500              mov eax, dword ptr [00450E28]:0040374F 83F804                  cmp eax, 00000004                                ====>E-mail不能少于4位

:00403752 0F8CB2000000            jl 0040380A                               

:00403758 8364241000              and dword ptr [esp+10], 00000000:0040375D EB05                    jmp 00403764

* Reference To: USER32.SendMessageA, Ord:0214h                                 |:004037B0 FF15F4444200            Call dword ptr [004244F4]:004037B6 80BEC000000000          cmp byte ptr [esi+000000C0], 00:004037BD 742F                    je 004037EE                               

* Possible StringData Ref from Data Obj ->"  祝贺你       你已经成为了《书香门第》注册用户!"                                 :004037BF 6898C64200              push 0042C698

以下是用0llydbg v1.09cn跟踪的:填e_mail : [email protected] 试验码 : 789456123012345678901234

00403712  PUSH    EDI00403713  MOV     EDI, zbook.00452268          ;  ASCII [email protected]"00403718  LEA     EBP, DWORD PTR DS:[ESI+13C]0040371E  PUSH    2000403720  PUSH    EDI                          ;  EDI=00452268 ,ASCII [email protected]"00403721  MOV     ECX, EBP00403723  CALL    zbook.0041A35B00403728  LEA     EBX, DWORD PTR DS:[ESI+100]0040372E  PUSH    2000403730  PUSH    zbook.00451A48               ;  ASCII 789456123012345678901234"00403735  MOV     ECX, EBX00403737  MOV     DWORD PTR DS:[450E28], EAX0040373C  CALL    zbook.0041A35B00403741  CMP     EAX, 1800403744  JNZ     zbook.0040380A0040374A  MOV     EAX, DWORD PTR DS:[450E28]0040374F  CMP     EAX, 400403752  JL      zbook.0040380A00403758  AND     DWORD PTR SS:[ESP+10], 00040375D  JMP     SHORT zbook.004037640040375F  MOV     EAX, DWORD PTR DS:[450E28]00403764  PUSH    EAX                          ;  EAX=E00403765  IMUL    EAX, DWORD PTR SS:[ESP+14]   ;  EAX=EAX*SS:[12F454]=E*0=0||EAX*SS:[12F454]=E*01=E0040376A  ADD     EAX, zbook.00451A68          ;  ASCII [email protected]@163.com.......0040376F  PUSH    EDI                          ;  EDI=00452268 ,ASCII [email protected]"00403770  PUSH    EAX                          ;  EAX=00451A7600403771  CALL    zbook.004083E0               ;  把e_mail传送到451A68开始的地址中一共40h组00403776  ESP, 0C00403779  INC     DWORD PTR SS:[ESP+10]        ;  SS:[12F454]=0 ++0040377D  CMP     DWORD PTR SS:[ESP+10], 40    ;  SS:[12F454]=1 ++00403782  JL      SHORT zbook.0040375F         ;  把e_mail传送到451A68开始的地址中一共40h组连接起来00403784  MOV     EDI, zbook.00451248          ;  ASCII 789456123012345678901234"00403789  PUSH    200040378B  PUSH    zbook.00451A48               ;  ASCII 789456123012345678901234"00403790  PUSH    EDI00403791  CALL    zbook.004083E000403796  ADD     EDI, 2000403799  ADD     ESP, 0C0040379C  CMP     EDI, zbook.00451A48          ;  ASCII 789456123012345678901234"004037A2  JL      SHORT zbook.00403789         ;  把试验码传送到451248-451A48开始的内存中004037A4  XOR     EDI, EDI004037A6  PUSH    EDI                                   ; /lParam => 0004037A7  PUSH    EDI                                   ; |wParam => 0004037A8  PUSH    1501                                  ; |Message = MSG(1501)004037AD  PUSH    DWORD PTR DS:[ESI+1C]                 ; ||hWnd = B025C   004037B0  CALL    DWORD PTR DS:[] ; \这个api是转移到计算注册码地址的call004037B6  CMP     BYTE PTR DS:[ESI+C0], 0               ;  DS:[ESI+C0]=DS:[12FAF4]注册标记004037BD  JE      SHORT zbook.004037EE                  ;  这里跳到错误的提示框004037BF  PUSH    zbook.0042C698                        ;  到这里就成功004037C4  MOV     DWORD PTR DS:[452A68], EDI004037CA  CALL    zbook.00405666  

//因为上面的跳转是通过API的方式,所以太难找到核心

=============================================================================

CALL    DWORD PTR DS:[] ; \这个api是转移到计算注册码地址的call||77DF1D07  CALL DWORD PTR SS:[EBP+8]|CALL DWORD PTR SS:[EBP+8]|

00403860  MOV     EBP, ESP00403862  SUB     ESP, 10000403868  PUSH    ESI00403869  PUSH    200040386B  CALL    zbook.004088FB00403870  PUSH    4000403872  MOV     ESI, zbook.0045114800403877  CDQ00403878  POP     ECX                  ;  ECX=4000403879  IDIV    ECX                  ;  EAX=13CA  IDIV ECX=40  ==>EAX=4F   EDX=A0040387B  SHL     EDX, 5               ;  EDX=A SHL 5=1400040387E  ADD     EDX, zbook.00451248  ;  EDX=EDX+451248( ASCII 789456123012345678901234")=00403884  PUSH    EDX                  ;  EDX=zbook.00451388,ASCII 789456123012345678901234")00403885  PUSH    ESI                  ;  //经过上面的漫长的转折终于来到试验码的地址00403886  CALL    zbook.004083E0       ;  00451148 EAX=1A7   EDX=39004038B2  LEA     EAX, [LOCAL.64]004038B8  IMUL    EDX, DWORD PTR DS:[450E28] ;  EDX=EDX*DS:[450E28]=39*0E=31E004038BF  ADD     EDX, zbook.00451A68       ;  ASCII [email protected]@163.com004038C5  PUSH    EDX                       ;  zbook.00451D86004038C6  PUSH    EAX                       ;  //用上面的方法取计算的参数从451D86处做基数004038C7  CALL    zbook.004083E0004038CC  PUSH    0C004038CE  PUSH    ESI                       ;  ESI=00451148 ,ASCII 789456123012345678901234")004038CF  PUSH    zbook.004510C8            ;  ASCII 骧溻滗怃纩祧"004038D4  CALL    zbook.004083E0            ;  取试验码的前12位==>004510C8004038D9  PUSH    0C004038DB  PUSH    zbook.00451154004038E0  PUSH    zbook.00451048004038E5  CALL    zbook.004083E0            ;  取试验码的后12位==>00451048004038EA  MOV     EAX, DWORD PTR DS:[450E28];  EAX=E004038EF  AND     BYTE PTR DS:[451054], 0004038F6  AND     BYTE PTR DS:[4510D4], 0004038FD  ADD     ESP, 2400403900  XOR     EDX, EDX00403902  TEST    EAX, EAX00403904  JLE     SHORT zbook.0040393400403906  PUSH    EBX00403907  PUSH    EDI00403908  LEA     EBX, DWORD PTR DS:[EAX-1]       ;  EBX=E-1=D0040390B /LEA     EDI, DWORD PTR SS:[EBP+EDX-100] ;  EDI00451145 (03 05 04 04 05 03 06 02 07 01 08 00)

00403A04  PUSH    ESI00403A05  PUSH    EBP00403A06  PUSH    EBX00403A07  CALL    zbook.004083E0                            

;  把前12位倒置后==>00451148 (00 08 01 07 02 06 03 05 04 04 05 03)

00403A0C  ADD     ESP, 2400403A0F  XOR     EBX, EBX00403A11  TEST    ESI, ESI

****************************************************************第一次计算的总结:                      1.计算的参数是一个固定值C2.这段计算是C MOD 9 的值设M 然后用8-M得到值设N,再把C++继续3.取得到的数组的后12位与前12位值倒置后的数组连接成24位的数组4.得到一组值==>00451148,  N=00 08 01 07 02 06 03 05 04 04 05 03 03 05 04 04 05 03 06 02 07 01 08 00 5.就是说上面的数组是固定的.

004039DA  AND     BYTE PTR DS:[ESI*2+451148], 0004039E2  PUSH    EBX004039E3  PUSH    EBP004039E4  LEA     EDI, DWORD PTR DS:[ESI+451148]004039EA  PUSH    ESI                            ;  ESI=0C004039EB  MOV     EBP, zbook.00450F48004039F0  PUSH    EDI                            ;   zbook.00451154004039F1  PUSH    EBP004039F2  CALL    zbook.004083E0               ;  把后12位==>00450F48 (00 08 01 07 02 06 03 05 04 04 05 03)004039F7  MOV     EBX, zbook.00451148004039FC  PUSH    ESI004039FD  PUSH    EBX004039FE  PUSH    EDI004039FF  CALL    zbook.004083E0               ;  把前12位==>00451145 (03 05 04 04 05 03 06 02 07 01 08 00)00403A04  PUSH    ESI00403A05  PUSH    EBP00403A06  PUSH    EBX00403A07  CALL    zbook.004083E0               ;  把前12位倒置后==>00451148 (00 08 01 07 02 06 03 05 04 04 05 03)00403A0C  ADD     ESP, 2400403A0F  XOR     EBX, EBX00403A11  TEST    ESI, ESI00403A13  JLE     SHORT zbook.00403A66     //第二次的关键计算:00403A15  /MOV     AL, BL00403A17 |MOV     CL, BYTE PTR DS:[EBX+4510C8] ;  CL 00450F4800403A8D  PUSH    ESI00403A8E  PUSH    zbook.00451048                 ;  连接后的后12位==>00450F4800403A93  PUSH    EDI00403A94  CALL    zbook.004083E0                  ;  连接后的前12位==>00450F5400403A99  ADD     ESP, 3000403A9C  XOR     EAX, EAX00403A9E  TEST    ESI, ESI00403AA0  POP     EBP00403AA1  POP     EBX00403AA2  JLE     SHORT zbook.00403AC000403AA4 /MOV     CL, BYTE PTR DS:[EAX*2+450F49] ;  CLDS:[4511C8]=E600403ABE \JL      SHORT zbook.00403AA4        //循环取值00403AC0  AND     BYTE PTR DS:[ESI+4511C8], 0  

;  004511C8

相关文摘:破解文章 windows
标题名称:《v1.23 广告条破解法 算法分析》
本文网址:https://www.sdruilu.cn/news/tpart-21115.html