吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6343|回复: 5
收起左侧

[原创] PowerISO V4.3 Patch

[复制链接]
yangjt 发表于 2009-2-5 16:04
【文章标题】: PowerISO V4.3
【文章作者】: yangjt
【作者邮箱】: yangjietao123@163.com
【作者主页】: http://blog.sina.com.cn/yangjt
【作者QQ号】: 325002492
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  打开软件……发现蹦出一个nag,于是乎就想去掉它……
  
  OD装载……很显然……没有壳……然后找字符串……结果发现都是英文的……突然想到这是个多国语言版,于是乎找unreg这个字符,找到这个地方
  00432298   .  68 08314D00   push    004D3108                         ;  unregistered copy
  
然后IDA打开分析之~~
  发现sub_432240这段函数里有很有意思的东西~~
    CString__operator_("PowerISO");
    if ( !(_BYTE)dword_5305B4 )
    {
      sub_48CDDF("(");
      v5 = sub_46F0F0(39, "Unregistered copy");
      sub_48CDDF((LPCSTR)v5);
      sub_48CDDF(L")");
    }
  
很显然……有没有注册就是判断5305B4这个位置的值是不是0……
  根据程序的意思,如果是0那就没有注册,反之就是注册……这下就简单了……我们先把它改成1试试看……
  事实证明,改成1以后那个程序标题上的未注册版就没有了……但是NAG还是存在……于是乎继续找字符串……
  找到下一个字符串unreg的地点
  00451201  |.  68 08314D00   push    004D3108                         ;  unregistered copy
  
这里……IDA里F5
    if ( (_BYTE)dword_5305B4 )
    {
      if ( strlen(byte_5305D8) - 1 <= 0x14 )
      {
        v19 = sub_46F0F0(38, "Registered to:  ");
        CString__operator_((LPCSTR)v19);
        a2 = off_4DB5D4;
        CString__operator_(byte_5305D8);
        LOBYTE(v23) = 5;
        CString__operator__(&a2);
        LOBYTE(v23) = 1;
        sub_48CA90();
        Rect.left = 0;
        Rect.right = v4;
        v20 = *(_DWORD *)v3;
        Rect.top = v26 + 10;
        Rect.bottom = v5 + v26 + 10;
        (*(int (__thiscall **)(void *, void *, _DWORD, struct tagRECT *, signed int))(v20 + 104))(
          v3,
          v22,
          *((_DWORD *)v22 - 2),
          &Rect,
          1);
      }
  
看来不仅要判断5305B4这个位置,还要判断5305D8这个位置……据分析……这个位置应该就是用来储存注册用户名的,既然要储存,当然要写入……那就在这里下硬件写入断点,会断在两个地方……
  Place 1
  
  004305C3  |.  881D D8055300 mov     byte ptr [5305D8], bl            ; |
  004305C9  |.  881D 90055300 mov     byte ptr [530590], bl            ; |
  004305CF  |.  FF15 10D04A00 call    dword ptr [<&ADVAPI32.RegCreateK>; \RegCreateKeyExA
  
  
  
  Place 2
  00430483  |.  881D D8055300 mov     byte ptr [5305D8], bl            ; |
  00430489  |.  881D 90055300 mov     byte ptr [530590], bl            ; |
  0043048F  |.  FF15 10D04A00 call    dword ptr [<&ADVAPI32.RegCreateK>; \RegCreateKeyExA
  
很显然……程序从注册表里读完了数据就开始往内存里写,据分析……place 2 是从place 1后面的某个Call 过来的,所以我们只改第一个Call就好了……
  
  找到第一个procedure的起始地址,然后开始补丁
  00430590      C605 B4055300>mov     byte ptr [5305B4], 1
  00430597      C605 DC055300>mov     byte ptr [5305DC], 65
  0043059E      C705 D8055300>mov     dword ptr [5305D8], 72757A41
  004305A8      C3            retn
  
显然……在这里如果直接ret,下面的流程就不会执行,也不用考虑
  补丁代码的第一句是让Unreg消失,补丁的第二句是让程序显示注册给谁……^_^这里是Azure
  运行程序……虽然Unreg字符也没有了看关于也注册了……不过Nag还是存在……别忘了我们是准备干啥的……
  既然弹出NAG就要ShowWindow,以下是堆栈变化情况
  第一次
  0012F5F4   00490D5F  /CALL 到 ShowWindow 来自 PowerISO.00490D59
  0012F5F8   00490B3E  |hWnd = 00490B3E (class='#32770',parent=004B0B40)
  0012F5FC   00000001  \ShowState = SW_SHOWNORMAL
  0012F600   0049476F  返回到 PowerISO.0049476F 来自 PowerISO.00490D4B
  
  第二次
  0012F5F4   00490D5F  /CALL 到 ShowWindow 来自 PowerISO.00490D59
  0012F5F8   00670896  |hWnd = 00670896 (class='#32770',parent=002A0B1A)
  0012F5FC   00000001  \ShowState = SW_SHOWNORMAL
  0012F600   0049476F  返回到 PowerISO.0049476F 来自 PowerISO.00490D4B
  
  ....(中间省略)
  第七次
  0012FEAC   00490D5F  /CALL 到 ShowWindow 来自 PowerISO.00490D59
  0012FEB0   002A0B46  |hWnd = 002A0B46 ('PowerISO(未注册版本) - New Im...',class='Afx:400000:0')
  0012FEB4   00000005  \ShowState = SW_SHOW
  0012FEB8   00478C3D  返回到 PowerISO.00478C3D 来自 PowerISO.00490D4B
  
  第八次
  0012F930   00490D5F  /CALL 到 ShowWindow 来自 PowerISO.00490D59
  0012F934   00980A8E  |hWnd = 00980A8E ('PowerISO',class='#32770',parent=00340B46)
  0012F938   00000001  \ShowState = SW_SHOWNORMAL
  0012F93C   00490585  返回到 PowerISO.00490585 来自 PowerISO.00490D4B
  0012F940   00000001
  0012F944   00000000
  0012F948   0012F9AC
  0012F94C   0012F99C
  0012F950   00000004
  0012F954   00000001
  0012F958   00000000
  0012F95C   00000001
  0012F960   00340B46
  0012F964   0048D506  返回到 PowerISO.0048D506 来自 PowerISO.0049050F
  0012F968   00000004
  0012F96C   00000001
  0012F970   01E25770
  0012F974   00432520  PowerISO.00432520
  0012F978   00432626  返回到 PowerISO.00432626 来自 PowerISO.00430A10
  0012F97C   00000000
  0012F980   0012F9AC
  0012F984   005823D0  PowerISO.005823D0
  0012F988   00340B46
  0012F98C   0012F96C
  0012F990   0012FC60  指向下一个 SEH 记录的指针
  0012F994   004ABE24  SE处理程序
  0012F998   00000000
  0012F99C  /0012FCE0
  0012F9A0  |00432636  返回到 PowerISO.00432636 来自 PowerISO.0048D425
  0012F9A4  |01E25770
  0012F9A8  |00000000
  0012F9AC  |004AF0E8  PowerISO.004AF0E8
  0012F9B0  |00000001
  0012F9B4  |00000000
  0012F9B8  |00000000
  0012F9BC  |00000000
  0012F9C0  |00000001
  0012F9C4  |00000000
  0012F9C8  |00980A8E
  0012F9CC  |00000000
  0012F9D0  |00000018
  0012F9D4  |75BF2735  user32.DefDlgProcA
  
想必这个第八次就应该是NAG了……仔细观察堆栈,发现这一大段执行完后返回的地方应该是返回到 PowerISO.00432636 因为中间有个异常处理……相信这个异常处理只是针对这个NAG的……
  
  直接返回到这里
  00432636   . /EB 0E         jmp     short 00432646
  
观察其上方代码
  00432621   .  E8 EAE3FFFF   call    00430A10
  00432626   .  83C4 28       add     esp, 28
  00432629   .  85C0          test    eax, eax
  0043262B   .  75 0B         jnz     short 00432638
  0043262D   .  8D4C24 08     lea     ecx, dword ptr [esp+8]
  00432631   .  E8 EFAD0500   call    0048D425
  00432636   .  EB 0E         jmp     short 00432646
  
执行00430A10,应该是个BOOL类型的,然后看EAX,不是0就跳……没有NAG……
  显然那个call在计算注册码。这么容易让我们找到了……不进去看看可不是好孩子……
  说实话我已经晕倒了……
  啥乱其八糟的……都怪我学汇编没学好……看也看不懂……囧rz
  
  好吧好吧……直接补丁好了……
  1
  00430590     /E9 51C70700        jmp     004ACCE6
  
  2
  00432629      40                 inc     eax
  
  3
  004ACCE6      C605 B4055300 01   mov     byte ptr [5305B4], 1
  004ACCED      C605 DC055300 65   mov     byte ptr [5305DC], 65
  004ACCF4      C705 D8055300 417A>mov     dword ptr [5305D8], 72757A41
  004ACCFE      C3                 retn
  
当然04ACCE6处的补丁也可以直接写在00430590,反正下面的东西都不准备要了。
  拍屁股走人……
  
--------------------------------------------------------------------------------
【经验总结】
  看来学好汇编和数学真的很有必要……
  
效果请见http://www.52pojie.cn/thread-18559-1-1.html
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年02月05日

[ 本帖最后由 yangjt 于 2009-2-5 16:06 编辑 ]

免费评分

参与人数 1威望 +1 收起 理由
chenguo + 1 感谢发布原创作品,[吾爱破解]因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2009-2-5 17:29
学习PowerISO破解,加精鼓励~
wgz001 发表于 2009-2-5 19:41
estelle 发表于 2009-2-6 00:26
419611868 发表于 2009-2-8 16:53
来看看了啊
Squn 发表于 2009-2-9 10:57
哇 IDA的文章... 我喜欢~~~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 20:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表