首页
社区
课程
招聘
编程实现修改硬件物理序号/指纹
发表于: 2005-7-24 15:04 14137

编程实现修改硬件物理序号/指纹

2005-7-24 15:04
14137

首先声明,本方法有一定局限性,可以在不脱壳,反调试的情况下实现修改硬盘序列号,以国外某邮件群发软件为例,破解思路和代码如下:

该软件为asprotect加壳,并在程序中使用asprotect sdk调用壳参数实现注册和功能限制,现已获取某个硬盘指纹的永久注册码,需要破解硬盘物理序号的限制,以便多台电脑使用。

因为该程序带有自校验和并使用加密壳的sdk调用到壳的参数,所以不推荐脱壳和修复(费时),通过内存搜索,获取硬盘指纹的存储地址为00164398,尝试使用keymake制作内存补丁修改该地址,失败,提示不能在调试进程运行该程序,换用ppatcher,结果一样。既然如此,只能自己编程解决这个问题了。以下是跨进程修改内存的代码:
注:因为不能创建调试进程,所以代码使用了比较笨拙的方式实现内存的修改和锁定。

unit Unit2;

interface

uses
  Classes,SysUtils,Windows,Variants,TLHELP32_Hss,unit1;

type
  crack = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;

  public
   procedure docrack;
  end;

implementation

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure crack.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ crack }
function  FindMission(EXENAME:String):longint;// FProcessesID
var
Snapshot: TProcessList;
begin
    Snapshot:=TProcessList.Create();
    result:=Snapshot.GetProcessID(EXENAME);
    Snapshot.Free;
end;
function WriteValue(pid:longint;address:string;value:string):Dword;
var
LGet: Dword;
ValueAddress:pointer;
begin
    pid:=OpenProcess(PROCESS_ALL_ACCESS,False,pid);
    ValueAddress:=ptr(strtoint('$'+address));
    WriteProcessMemory(pid,ValueAddress,@value[1],length(value),LGet);
    result:=LGet;
end;
procedure crack.docrack;

var
p:longint;
begin
while true do
   begin
    p:=FindMission('sendsafe.exe');
    if p>0 then
     begin

//    WriteValue(p,'12F824','212487602000');//锁定硬盘物理序号
       WriteValue(p,'00164398','5BQ5MgAQGNw=');//锁定指纹
     end;

     end;

end;
procedure crack.Execute;

begin
    docrack
end;

end.

运行需破解程序前创建这个线程对象,就可以不必在调试状态实现对其他程序进程的内存修改和锁定。最后,把这个内存patch程序和原版exe作为资源压缩在另外一个exe,运行则先后释放和执行内存patch程序和原版exe,方便用户使用。(备注:最好在patch中加入检测代码,在不必要的时候停止锁定并退出,以释放系统资源。)

2005/7/24 网网 QQ:108508999


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

收藏
免费 7
支持
分享
最新回复 (15)
雪    币: 97697
活跃值: (200829)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习之。
2005-7-24 15:36
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
3
思路不错,学习中……
2005-7-24 15:42
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
不知道能通过多少个软件程序
2005-7-24 16:17
0
雪    币: 233
活跃值: (111)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
最初由 夜凉如水 发布
不知道能通过多少个软件程序


能通过多少个软件程序在乎你能否分析彻透准确的硬件id存储地址和调用时机,有时候它有多个存储拷贝,都需要修改,但是锁定太多地址又可能超成软件的不稳定,所以要把握修改锁定和释放锁定的时机,需要对程序加密机制执行过程有一定的了解。
2005-7-24 16:35
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
学习
2005-7-24 17:45
0
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
7
标题很吓人。

但是内容还不错。问题还是时机,这个比较难把握。
2005-7-24 21:17
0
雪    币: 159
活跃值: (89)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
大菜鸟开眼了,呵呵发现现在大家的思路越来越新颖了
2005-7-24 21:49
0
雪    币: 420
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
能不能做个样品看看啊,最好加上原码!
2005-7-25 12:18
0
雪    币: 233
活跃值: (111)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
最初由 basaiyv1 发布
能不能做个样品看看啊,最好加上原码!

文中已附上详细代码,大家都可以自己实现这个程序,理解代码的功能后需要灵活应用,对各个软件做一点定制,比如文中硬件码地址在各个软件中不会是一致的。
2005-7-25 13:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习,但还是似懂非懂的。
2005-7-27 16:15
0
雪    币: 124
活跃值: (107)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
Netx 兄是不是对PHP也很熟悉。以前在北京某家网络公司做?
2005-7-27 16:25
0
雪    币: 260
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
这是个好办法,买注册码也不怕硬盘丢了。
2005-7-28 00:21
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
基本上明白意思了
2005-7-28 10:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我有两个方法。

1,直接修改硬盘的物理序列号,最简单的方法,很少人知道怎么做的方法。

2,另外一个方法是写个小程序实时监视修改硬盘的数据缓冲区,这个要比LZ的复杂些,但是不会象方法1那样把硬件失去保修。
2005-7-28 12:57
0
雪    币: 260
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
最初由 yanzihui 发布
我有两个方法。

1,直接修改硬盘的物理序列号,最简单的方法,很少人知道怎么做的方法。

2,另外一个方法是写个小程序实时监视修改硬盘的数据缓冲区,这个要比LZ的复杂些,但是不会象方法1那样把硬件失去保修。

能不能把你的方法举个例子。
2005-7-28 16:15
0
游客
登录 | 注册 方可回帖
返回
//