首页
社区
课程
招聘
利用hook编写通用破解程序
发表于: 2005-7-23 17:15 17658

利用hook编写通用破解程序

2005-7-23 17:15
17658

市面上很多软件运行后提示需要注册或者加密狗,如果无狗或不注册,则软件的主窗口自动关闭退出。针对这类加密的程序,可以使用hook编程拦截wm_close或wm_quit消息,阻止程序主窗口的关闭和程序的退出。当然,必须先确认程序在提示注册或提示无狗或自动退出之前已经加载所有必须的模块而且主窗体构造完成(不一定需要已经显示),否则你阻止了程序的退出,软件仍然会不能正常使用。
下面我以日本的某电路设计软件为例,破解思路和破解程序代码如下:
该软件需要加密狗,运行程序后会通过timer检测加密狗,如果没有发现加密狗或者加密狗被拔除,则产生wm_close消息,通知主窗体退出。
你可以选择拦截timer事件,阻止他检测加密狗,但是这样会导致软件其他地方需要timer事件触发的功能不正常。,所以必须拦截加密狗检测完成后向主窗体发送的wm_close事件。
以下是我拦截事件的代码。
library hdll;

uses
  SysUtils,
  dialogs,
  Classes,
  windows,
  messages,
  shellapi;

{$R *.res}

var syshook:hhook;
    SavedProc:pointer;

function WinProc(hWnd: HWND; Msg: UINT;  wParam: WPARAM;  lParam: LPARAM): LRESULT; stdcall;
var
msgstr:string;
begin
msgstr:='If you want close applicatin,please close dog simulator first!';
case msg of
  WM_CLOSE: begin
   showmessage(msgstr);
   result:=1;
  end;
  else result := CallWindowProc(SavedProc,hwnd,msg,wparam,lparam);

end;
end;

procedure GetAndSet(h:integer);stdcall;

begin
if pointer(getwindowlong(h,GWL_WNDPROC))<>@winProc then
  begin
     SavedProc:=pointer(SetWindowLong(h,GWL_WNDPROC,cardinal(@Winproc)));
end;
end;

function CallWndProc(
    nCode:integer ;        // hook code
    wParam:    WPARAM ;        // current-process flag
    lParam:    LPARAM          // address of structure with message data
    ):LRESULT;stdcall;
var
    h:longint;
begin
h:=FindWindow(pchar('DKMagic_CLASS'),nil);
if tmsg(pointer(lparam)^).hwnd=h then
  begin
   GetAndSet(h);
  end;
result:=CallNextHookex(syshook,ncode,wparam,lparam);
end;

procedure RunStopHook(b:boolean);export;stdcall;
begin

if b
  then SyShook:=Setwindowshookex(WH_GETMESSAGE,@callWndProc,Hinstance,0)
  else unhookwindowshookex(syshook);
if (syshook=cardinal(-1)) or(syshook=cardinal(0)) then
  messagebox(0,'hook失败','',mb_ok);
end;

exports RunStopHook;

begin
end.

这个破解方法对国内众多共享软件也测试通过。

2005/7/25 网网 QQ:108508999


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (28)
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
成品呢?

嘿嘿 想试试
2005-7-23 17:34
0
雪    币: 463
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
那只是简单的检测是否存在狗,如果要检验狗内的数据,才能使用某功能呢? 那你的东西基本上就无效了吧.
2005-7-23 17:38
0
雪    币: 124
活跃值: (107)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
嘿嘿,三楼说的很好
2005-7-23 17:41
0
雪    币: 233
活跃值: (111)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
不错,只是对付一般的加密手段,你说的情况用这个简单破解方式是不适合的,但我下一遍文章会介绍怎么解决功能限制的问题。谢谢关注。
2005-7-23 17:46
0
雪    币: 124
活跃值: (70)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
太简单了吧,你既然知道是发送vm_close,为什么不把它nop掉?

也不就那么几个0x90吗?写那么多代码hook不累吗?

还说通用破解程序。真是口气好大啊
2005-7-23 19:03
0
雪    币: 210
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我觉得。方法很好!
也许我是新人,这样可以方便做到通用!!!
2005-7-23 22:57
0
雪    币: 233
活跃值: (111)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
最初由 jskew 发布
太简单了吧,你既然知道是发送vm_close,为什么不把它nop掉?

也不就那么几个0x90吗?写那么多代码hook不累吗?

还说通用破解程序。真是口气好大啊


说通用口气很大?我保证如文中所叙的加密类型的软件是通用的,你可能很喜欢对各个软件脱壳修复、去自校验、调试&反汇编和NOP的工作,对我来说是很厌烦的事情,所我编写这个“通用”hook程序应付这类软件。实际上我还用hook api和跨进程内存访问实现很多破解的“通用”,国内外这样破解软件的人并不是少数。
2005-7-24 00:30
0
雪    币: 423
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
现在通用和百货公司一样,其实真正能用上的很少,但是也不能说没有,实际这样使用还是比较麻烦的,不如自己破掉好!

这样能破,一般都是可以爆破的软件
2005-7-24 00:35
0
雪    币: 233
活跃值: (111)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
虽然我不想再讨论文中“通用”的意义,但我还是得强调一下其中“可重用”的内涵。爆破软件的“便利”众所周知,我编写hook程序主要是因为前些年要处理大量简单加密的软件,最近也经常碰到加壳和带自校验的程序,使得一些本来简单加密的软件破解成本增高。
2005-7-24 01:03
0
雪    币: 214
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
思路很好,精!!
2005-7-24 02:53
0
雪    币: 3688
活跃值: (4242)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
12
好文章,支持!!!各有各的路,各有各的法,支持楼主!
2005-7-24 09:08
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
13
2005-7-24 09:23
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
14
我认为楼主的方法巧妙,简单,易行,其实做什么也都需要创造力思维。这个方法对于大多数软件来说确实是真正做到了简单,通用,重在思想创造,支持楼主,期待楼主放出作品~
2005-7-24 09:28
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
很不错的说.对于加壳后的软件就更妙了,不用那么麻烦的脱壳破解了.思路不错,顶一下
2005-7-24 09:31
0
雪    币: 111
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
楼主的方法有一定代表性.
放出来受益的是大家.
没有必要在个别词句上咬文嚼字吧.
2005-7-24 10:07
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
17
最初由 china 发布
好文章,支持!!!各有各的路,各有各的法,支持楼主!


好久没看见你了
2005-7-24 10:43
0
雪    币: 3688
活跃值: (4242)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
18
最初由 baby2008 发布



好久没看见你了


我基本等于死亡了。呵呵。
2005-7-24 11:20
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
19
卖身不卖艺 是你吧?
2005-7-24 11:53
0
雪    币: 538
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
纯支持..重要的是思路
2005-7-24 15:30
0
雪    币: 97697
活跃值: (200829)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
21
思路的确重要。不要局限于某种方法。
2005-7-24 15:35
0
雪    币: 221
活跃值: (137)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
22
非常赞同楼主
2005-7-24 19:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
是个好方法啊.
2005-7-24 22:02
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
24
很巧妙的思路 支持楼主
2005-7-25 10:31
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
25
Good!,好方法
2005-7-25 11:36
0
游客
登录 | 注册 方可回帖
返回
//