欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

注册亮点压缩实录 (6千字)

注册亮点压缩实录 (6千字)

注册亮点压缩实录
by 6767 [BCG] @2001/06

工具:SoftIce, IceDump 6.023, RegMon, FrogIce
http://sd.onlinedown.net/down/nbz20c.exe

    受朋友之托,写这个,呵呵。其实机器上有winzip、rar,还有wincommand自带解压,压缩软件在我机器上没有市场。

    它加了壳,UPX的,在这个例子中是否脱壳不重要,但有必要给象我一样的初学者讲一下:手动脱UPX的壳很容易。
1、先运行frogice,这个应养成习惯;再运行IceDump 6.023;用Symble Loader载入bzip.exe。差点忘了需要先用PE编辑功能记下它的Size of Image:1FF000、Image of Base:400000。
    程序入口在这里:

017F:005FB370  60                  PUSHAD                <- 停在这
017F:005FB371  BE30605600          MOV      ESI,00566030
017F:005FB376  8DBED0AFE9FF        LEA      EDI,[ESI+FFE9AFD0]
017F:005FB37C  57                  PUSH      EDI
017F:005FB37D  83CDFF              OR        EBP,-01
017F:005FB380  EB10                JMP      005FB392
017F:005FB382  90                  NOP
017F:005FB383  90                  NOP
017F:005FB384  90                  NOP
017F:005FB385  90                  NOP

2、看官们记住了,这就是被UPX压过的特征,脱壳很简单:按Ctrl+PageDown(不要告诉我你找不到)向下翻页,直到这里:
017F:005FB4CE  8903                MOV      [EBX],EAX
017F:005FB4D0  83C304              ADD      EBX,04
017F:005FB4D3  EBD8                JMP      005FB4AD
017F:005FB4D5  FF9654DC1F00        CALL      [ESI+001FDC54]
017F:005FB4DB  61                  POPAD             <- 恢复现场
017F:005FB4DC  E91F5BE0FF          JMP      00401000        <- 跳向 Original Entry Point
017F:005FB4E1  0000                ADD      [EAX],AL
017F:005FB4E3  00FC                ADD      AH,BH
017F:005FB4E5  B45F                MOV      AH,5F
017F:005FB4E7  00B0B55F0024        ADD      [EAX+24005FB5],DH
    下面是一些 00
3、你只要下:g 5FB4DC,按一次F5,再按一次F10就到了OEP,可以脱壳了。
017F:00401000  EB10                JMP      00401012        <- 这里就是OEP了(不知它为什么还跳,不管它)
017F:00401002  66623A              BOUND    DI,[EDX]
017F:00401005  43                  INC      EBX
017F:00401006  2B2B                SUB      EBP,[EBX]
017F:00401008  48                  DEC      EAX
017F:00401009  4F                  DEC      EDI
017F:0040100A  4F                  DEC      EDI
017F:0040100B  4B                  DEC      EBX
017F:0040100C  90                  NOP

4、在401000处下:/dump 400000 1ff000 bz_unpck.exe就能得到脱壳后的文件,不过还不能用。用PE Edit功能打开它,将每一section的psize改为与vsize值相等,offset改为与RVA相等,保存后就可用了(不过这次没法子用WDASM,DAMN!)。
    我们是想找出注册码,消灭这个大BUG是吧?继续。
5、用RegMon得知它在这里保存注册信息:
REGEDIT4
[HKEY_CURRENT_USER\Software\NSC\BrilliantZIP\Registered]
"a1"="6767"
"a2"="73E26-3789B-3ABC2-2DCE7"
"a3"="80D2A-43A38-D5D17-A56C4"
"a4"="BCG"
    分别为破解者姓名、机器码、注册码、破解组织名。好了,有线索就有办法。
6、下BPX RegQueryValueExA  DO "d esp->8" ,然后不停的按F5,直到看到a1出现,继续按F5,看到a3时下bd *阻断,之后小心的按几次人F12返回程序主线(BORLAND编译器的特征很明显),到这里:
017F:0049CB25  8BC6                MOV      EAX,ESI
017F:0049CB27  E898FFFFFF          CALL      0049CAC4
017F:0049CB2C  8BD8                MOV      EBX,EAX
017F:0049CB2E  85DB                TEST      EBX,EBX
017F:0049CB30  7E4F                JLE      0049CB81
017F:0049CB32  8BC7                MOV      EAX,EDI
017F:0049CB34  8BCB                MOV      ECX,EBX
017F:0049CB36  33D2                XOR      EDX,EDX
017F:0049CB38  E8A3C50600          CALL      005090E0
017F:0049CB3D  53                  PUSH      EBX

    再向下不远:
017F:0049CB55  803C2401            CMP      BYTE PTR [ESP],01
017F:0049CB59  7406                JZ        0049CB61
017F:0049CB5B  803C2402            CMP      BYTE PTR [ESP],02
017F:0049CB5F  7517                JNZ      0049CB78
017F:0049CB61  8B07                MOV      EAX,[EDI]        <- eax为输入注册码的偏移址
                                <- 记下这地址并下BPM

017F:0049CB63  E8D4C80600          CALL      0050943C
017F:0049CB68  E867430600          CALL      00500ED4
017F:0049CB6D  8BD0                MOV      EDX,EAX
017F:0049CB6F  8BC7                MOV      EAX,EDI
017F:0049CB71  E836CA0600          CALL      005095AC

7、设好bpm后,按F5继续运行,第一次中断是取长度的,再按一次F5,到这里:
-----KERNEL32!CompareStringA?---------------------------------------PROT32-
017F:BFFA20F7  8A01                MOV      AL,[ECX]
017F:BFFA20F9  648F02              POP      DWORD PTR FS:[EDX]
017F:BFFA20FC  83C404              ADD      ESP,04
017F:BFFA20FF  E96485FDFF          JMP      BFF7A668
017F:BFFA2104  57                  PUSH      EDI
017F:BFFA2105  6A23                PUSH      23
017F:BFFA2107  2BD2                SUB      EDX,EDX
017F:BFFA2109  68CB21FABF          PUSH      BFFA21CB
017F:BFFA210E  64FF32              PUSH      DWORD PTR FS:[EDX]
017F:BFFA2111  648922              MOV      FS:[EDX],ESP
--------------------------------------------------------------------------------
  MSR LastBranchFromIp=00536E46
    MSR LastBranchToIp=BFFA20E0
:/screendump d:bz07.htm
8、看到那个绿字KERNEL32!CompareStringA了?我是第一次见到这个函数,那么你猜猜它是什么意思呢?按几次F12返回到程序里:

017F:0050032A  8BC3                MOV      EAX,EBX
017F:0050032C  E80B910000          CALL      0050943C
017F:00500331  50                  PUSH      EAX        <- 这里是大家都想看到的
017F:00500332  6A01                PUSH      01
017F:00500334  6800040000          PUSH      00000400
017F:00500339  E8086B0300          CALL      KERNEL32!CompareStringA
017F:0050033E  83E802              SUB      EAX,02
017F:00500341  5E                  POP      ESI
017F:00500342  5B                  POP      EBX
017F:00500343  C3                  RET

    好了,大侠重新来过吧,载入后进行上述6的跟踪历程,见到目标a3后下bpx 500332 do "d eax",记下数据窗里显示的那些样子怪怪的,再用它来注册就可以了。
    收工。

    补记:icedump真是好东东,可以截图。想看我截的图just feel free to ask me for it.

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功