• 标 题:菜鸟破解录 JPEG Optimizer3.15 (6千字)
  • 作 者:xiA Qin
  • 时 间:2000-8-14 8:28:17
  • 链 接:http://bbs.pediy.com

菜鸟破解录 JPEG Optimizer3.15

软件名称:  JPEG Optimizer
软件版本:  3.15 
软件大小:  1408KB 
软件授权:  共享软件 
使用平台:  Win95/98/NT 
发布公司:  http://www.xat.com
软件简介:  该软件能对JPG图形文件压缩50%而不损失画质,自定压缩比,能即时显现压缩后的图片,让你比较差异,效果相当不错。



作    者:xiA Qin
级    别:很菜....很菜.....
解密日前:2000年8月11日
解密工具:Trw2000 1.22
破解目的:学习注册码的破解。


说    明:
        本文是在我的软件破解记录上整理出来的。如若有纰漏,请各位大侠多指教!


首先运行JPEG Optimizer
输入注册信息
Registration code:  12345678    &只能输入8个字符(程序会检查注册码的位数)

下指令bpx hmemcpy    //下中断点 

按F5回到程序,按确定,这时会被Trw2000拦截到。

下指令bd *            //屏障中断点

下指令pmodule        //直接跳到程序的领空


按F10来到下面指令
.................

015F:0042947E  LEA      EAX,[EBP-0C]
015F:00429481  XOR      EDX,EDX
015F:00429483  MOV      [EBP-10],EDX
015F:00429486  LEA      EDX,[EBP-10]
015F:00429489  INC      DWORD [ESI+1C]
015F:0042948C  CALL    0044CE07
015F:00429491  LEA      EDX,[EBP-10]
015F:00429494  MOV      EAX,EDI
015F:00429496  MOV      EDX,[EDX]
015F:00429498  CALL    0044585C
015F:0042949D  DEC      DWORD [ESI+1C]
015F:004294A0  LEA      EAX,[EBP-10]
015F:004294A3  MOV      EDX,02
015F:004294A8  CALL    0044C524
015F:004294AD  DEC      DWORD [ESI+1C]
015F:004294B0  LEA      EAX,[EBP-0C]
015F:004294B3  MOV      EDX,02
015F:004294B8  CALL    0044C524
015F:004294BD  MOV      WORD [ESI+10],2C
015F:004294C3  XOR      ECX,ECX
015F:004294C5  MOV      [EBP-08],ECX
015F:004294C8  LEA      EDX,[EBP-08]
015F:004294CB  INC      DWORD [ESI+1C]
015F:004294CE  MOV      EAX,[EBX+01C8]
015F:004294D4  CALL    0044582C
015F:004294D9  MOV      WORD [ESI+10],08
015F:004294DF  MOV      WORD [ESI+10],38
015F:004294E5  XOR      ECX,ECX
015F:004294E7  MOV      [EBP-14],ECX
015F:004294EA  LEA      EDX,[EBP-14]
015F:004294ED  INC      DWORD [ESI+1C]
015F:004294F0  MOV      EAX,[EBX+01C8]
015F:004294F6  CALL    0044582C
015F:004294FB  LEA      EAX,[EBP-14]
015F:004294FE  CALL    0044C77E
015F:00429503  CMP      EAX,BYTE +08    //第一个拦路虎,检查注册码的位数,8位
015F:00429506  JNZ      00429523        //注册码位数不等于8,就跳。
015F:00429508  CMP      DWORD [EBP-08],BYTE +00
015F:0042950C  JZ      00429513
015F:0042950E  MOV      EDX,[EBP-08]
015F:00429511  JMP      SHORT 00429518
015F:00429513  MOV      EDX,004825B3
015F:00429518  PUSH    EDX
015F:00429519  CALL    0042A0C4        //通过下面的分析,可以肯定此CAll有问题。按F8进入。
015F:0042951E  POP      ECX
015F:0042951F  TEST    AL,AL          //以al=1作为注册标志
015F:00429521  JNZ      00429527        //不跳则失败。
015F:00429523  XOR      EAX,EAX
015F:00429525  JMP      SHORT 0042952C
015F:00429527  MOV      EAX,01
015F:0042952C  PUSH    EAX
015F:0042952D  DEC      DWORD [ESI+1C]
015F:00429530  LEA      EAX,[EBP-14]
015F:00429533  MOV      EDX,02
015F:00429538  CALL    0044C524
015F:0042953D  POP      ECX
015F:0042953E  TEST    CL,CL
015F:00429540  JZ      NEAR 0042969E
.......................

按F8进入00429519  CALL    0042A0C4

015F:0042A0C4  PUSH    EBP
015F:0042A0C5  MOV      EBP,ESP
015F:0042A0C7  ADD      ESP,BYTE -0C
015F:0042A0CA  PUSH    EBX
015F:0042A0CB  MOV      EAX,[EBP+08]
015F:0042A0CE  LEA      EBX,[EBP-0C]
015F:0042A0D1  MOV      DL,[EAX]
015F:0042A0D3  MOV      [EBX],DL
015F:0042A0D5  MOV      CL,[EAX+01] <-|
015F:0042A0D8  MOV      [EBX+01],CL  |
015F:0042A0DB  MOV      DL,[EAX+02]  |载入
015F:0042A0DE  MOV      [EBX+02],DL  |假的注册码
015F:0042A0E1  MOV      CL,[EAX+03]  |
015F:0042A0E4  MOV      [EBX+03],CL  |
015F:0042A0E7  MOV      DL,[EAX+04]  |
015F:0042A0EA  MOV      [EBX+04],DL  |
015F:0042A0ED  MOV      CL,[EAX+05]  |
015F:0042A0F0  MOV      [EBX+05],CL  |
015F:0042A0F3  MOV      DL,[EAX+06]  |
015F:0042A0F6  MOV      [EBX+06],DL  |
015F:0042A0F9  MOV      CL,[EAX+07]  |
015F:0042A0FC  MOV      [EBX+07],CL  |
015F:0042A0FF  MOV      AL,[EAX+08] <-|
015F:0042A102  MOV      [EBX+08],AL
015F:0042A105  MOV      BYTE [EBX+09],00
015F:0042A109  MOVSX    EAX,BYTE [EBX]
015F:0042A10C  PUSH    EAX
015F:0042A10D  CALL    00472D34
015F:0042A112  POP      ECX
015F:0042A113  CMP      EAX,BYTE +4A      <--比较注册码第1位
015F:0042A116  JNZ      0042A171          <--不相等,就跳
015F:0042A118  MOVSX    EDX,BYTE [EBX+01]
015F:0042A11C  PUSH    EDX
015F:0042A11D  CALL    00472D34
015F:0042A122  POP      ECX
015F:0042A123  CMP      EAX,BYTE +53      <--比较注册码第2位
015F:0042A126  JNZ      0042A171          <--不相等,就跳
015F:0042A128  MOVSX    ECX,BYTE [EBX+02]
015F:0042A12C  CMP      ECX,BYTE +24      <--比较注册码第3位
015F:0042A12F  JNZ      0042A171          <--不相等,就跳
015F:0042A131  MOVSX    EAX,BYTE [EBX+03]
015F:0042A135  CMP      EAX,BYTE +32      <--比较注册码第4位
015F:0042A138  JNZ      0042A171          <--不相等,就跳
015F:0042A13A  MOVSX    EDX,BYTE [EBX+04]
015F:0042A13E  CMP      EDX,BYTE +38      <--比较注册码第5位
015F:0042A141  JNZ      0042A171            <--不相等,就跳
015F:0042A143  MOVSX    ECX,BYTE [EBX+05]
015F:0042A147  CMP      ECX,BYTE +39      <--比较注册码第6位
015F:0042A14A  JNZ      0042A171          <--不相等,就跳
015F:0042A14C  MOVSX    EAX,BYTE [EBX+06]
015F:0042A150  CMP      EAX,BYTE +32      <--比较注册码第7位
015F:0042A153  JNZ      0042A171          <--不相等,就跳
015F:0042A155  MOVSX    EDX,BYTE [EBX+07]
015F:0042A159  CMP      EDX,BYTE +31      <--比较注册码第8位
015F:0042A15C  JNZ      0042A171          <--不相等,就跳
015F:0042A15E  MOV      DWORD [0048A408],69FC4314
015F:0042A168  CALL    00404924
015F:0042A16D  MOV      AL,01
015F:0042A16F  JMP      SHORT 0042A18C
015F:0042A171  PUSH    EBX
015F:0042A172  CALL    0042CA48
015F:0042A177  POP      ECX
015F:0042A178  TEST    AL,AL
015F:0042A17A  JZ      0042A180
015F:0042A17C  MOV      AL,01
015F:0042A17E  JMP      SHORT 0042A18C
015F:0042A180  MOV      DWORD [0048A408],9603BCEB
015F:0042A18A  XOR      EAX,EAX
015F:0042A18C  POP      EBX
015F:0042A18D  MOV      ESP,EBP
015F:0042A18F  POP      EBP
015F:0042A190  RET   
.......................

我们把比较的数字抄下了分别是
1  2  3  4  5  6  7  8
4A 53 24 32 38 39 32 21

查ASCII字符表,十六进制。

十六进制: 4A 53 24 32 38 39 32 21
分别对应: J  S  $  2  8  9  2  1

整理一下,输入注册信息

Registration code:JS$28921

成功了。

注册信息在注册表中的
[HKEY_CURRENT_USER\Software\XA Tech\JpegOpt]
"Code"="JS$28921"