能力值:
(RANK:350 )
2 楼
最初由 Intelfan 发布 另外我有个帐号boyachang,不知道怎么就变成马甲了
论坛不允许一个人注册2个ID,如被发现就称为“马甲”。
这也是为了维护论坛秩序,希望你能理解。
能力值:
( LV2,RANK:10 )
3 楼
程序可以在我的网络硬盘下载
http://intelfan.ys168.com/
能力值:
( LV2,RANK:10 )
4 楼
最初由 Intelfan 发布 程序可以在我的网络硬盘下载 http://intelfan.ys168.com/
你这样肯定出问题,不是只有这个程序只读取硬盘ID号采用这个API.当然出问题了.
能力值:
( LV2,RANK:10 )
5 楼
也就是运行你的HOOK程序后,有些进程下的kerner32.dll里的API被改成JMP了
有的进程下的 API没变
可能是没全局HOOK
能力值:
( LV2,RANK:10 )
6 楼
呵呵,懒得改了,最初是改IAT的,但是对加了壳的程序不好用,所以用JMP的方式了,从别人现成的代码改的,它调用旧函数时候是要先恢复的,所以在多线程下有问题,其实调用旧函数可以直接执行备份的5个字节,然后JMP到函数的开头+5的位置,不过我很懒,能用就可以了。
能力值:
( LV2,RANK:10 )
7 楼
其实一般情况取硬盘ID还是不会出错的,我试了几个软件,钩住后机器码会变的,它不能钩住所有的进程的,它是用SetWindowsHook进入其它进程的,所以只有调用USER32.dll中的函数以后才能被钩住的。
能力值:
( LV2,RANK:10 )
12 楼
源代码已经放到我的网盘里了,
关于源代码:
此代码是我从网上找的两份代码基础上改的,第一个代码是用IAT来HOOKAPI,对于加壳的软件就无效了,后来我改用JMP方式的,可以对付加壳软件了。
备注:
只要程序调用USER32模块中的函数就会HOOK上的,像CMD就不会被HOOK上。
缺陷:
现在采用的JMP方式我没有改良,它是先恢复JMP指令的数据再执行原来的函数,所以同时有多个程序调用DeviceIOControl会有问题,不过基本上够用了。本人比较懒,够用就不再完善了。
谁能帮我转到论坛上呢?我的网盘还得总维护,太累…
呵呵,别干坏事儿?
能力值:
( LV6,RANK:90 )
13 楼
最初由 kanxue 发布 论坛不允许一个人注册2个ID,如被发现就称为“马甲”。 这也是为了维护论坛秩序,希望你能理解。
.......是如何知道一个人注册两个id的??
能力值:
( LV2,RANK:10 )
16 楼
楼主做了我正在做的,
现在我破一个软件,最后才发现是采用IceLicense
(http://www.ionworx.com/IceLicense.html)
保护的,IceLicense采用的椭圆曲线,想做注册机不太可能了,
但IceLicense采用硬盘ID做机器码,现在用HOOK CreateFile和DeviceIoControl来欺骗系统伪造假ID,还没有完成,希望能指点一二.
能力值:
( LV2,RANK:10 )
17 楼
里面可以配置返回的数据,也可以在模拟模式下自动截取硬盘ID数据,试一下行不行,还有你截获CreateFile干什么?
能力值:
( LV9,RANK:780 )
18 楼
我发一个钩住ExitWindowsEx的DLL源码
改一下就可以钩住别的API的
如下; =======hookdll.dll================== .486
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib SEH struct
a byte ?
api DWORD ?
d byte ?
e byte ?
SEH ends
WriteApi proto :DWORD ,:DWORD,:DWORD
MyAPI proto :DWORD ,:DWORD
.data
hInstance dd 0
WProcess dd 0
DllName db "user32.dll",0
ApiName db "ExitWindowsEx",0
Pmapi DWORD ?
Myapi DWORD ?
template db '%lX',0
posBuffer db 10 dup (0)
.data?
hHook dd ?
hWnd dd ? .code
DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
.if reason==DLL_PROCESS_ATTACH
push hInst
pop hInstance
invoke GetCurrentProcess
mov WProcess ,eax
invoke GetModuleHandle,addr DllName
invoke GetProcAddress,eax,addr ApiName
mov Pmapi,eax
invoke WriteApi,WProcess,Pmapi, offset MyAPI
.endif
mov eax,TRUE
ret
DllEntry Endp
GetMsgProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD
invoke CallNextHookEx,hHook,nCode,wParam,lParam
mov eax,TRUE
ret
GetMsgProc endp
InstallHook proc
invoke SetWindowsHookEx,WH_GETMESSAGE,addr GetMsgProc,hInstance,NULL
mov hHook,eax
ret
InstallHook endp
UninstallHook proc
invoke UnhookWindowsHookEx,hHook
ret
UninstallHook endp WriteApi proc Process:DWORD ,Papi:DWORD,Ptype:DWORD
LOCAL mbi:MEMORY_BASIC_INFORMATION
LOCAL msize:DWORD
LOCAL hacker:SEH
push Ptype
pop hacker.api
mov hacker.a,184
mov hacker.d,255
mov hacker.e,224 ;返回虚拟信息
invoke VirtualQueryEx,Process, Papi,addr mbi,SIZEOF MEMORY_BASIC_INFORMATION ;修改虚拟保护
invoke VirtualProtectEx,Process, mbi.BaseAddress,8h,PAGE_EXECUTE_READWRITE,addr mbi.Protect ;修改内存字节
invoke WriteProcessMemory,Process, Papi, addr hacker,sizeof SEH ,NULL invoke VirtualProtectEx,Process,mbi.BaseAddress,8h,PAGE_EXECUTE_READ,addr mbi.Protect ret
WriteApi endp
MyAPI proc bs:DWORD ,dwReserved:DWORD mov eax,TRUE
ret
MyAPI endp
End DllEntry
============================hookdll.def=======================
LIBRARY hookdll
EXPORTS InstallHook
EXPORTS UninstallHook
EXPORTS GetMsgProc =============================================================
LINK.EXE /SECTION:.bss[S] /DLL /DEF:$6 /SUBSYSTEM:WINDOWS /LIBPATH:"$L" /OUT:"$7",3
能力值:
( LV2,RANK:10 )
19 楼
最初由 Intelfan 发布 源代码已经放到我的网盘里了, 关于源代码: 此代码是我从网上找的两份代码基础上改的,第一个代码是用IAT来HOOKAPI,对于加壳的软件就无效了,后来我改用JMP方式的,可以对付加壳软件了。 ........
呵呵,谢谢楼主(lz)。
能力值:
( LV2,RANK:10 )
20 楼
最初由 Intelfan 发布 里面可以配置返回的数据,也可以在模拟模式下自动截取硬盘ID数据,试一下行不行,还有你截获CreateFile干什么?
ICE 采用以下四种方式获得ID, 我本想HOOK CreateFileb比Hook DeviceIoControl按全一点。
就HOOK CreateFile 使得CreateFile("\\.\C:")和CreateFile("\\.\Scsi0:")是返回空的,就可以迫使ICE系统采用GetVolumeInformationA。
正在学习你的代码,谢谢。
for I:=1 to 4 do
begin
case I of
1: //1: DeviceIoControl( "\\.\C:"
begin
DiskSerialNumber := DeviceIoInfor.GetDiskCSerialNumber();
ShowMessage('\.\C: '+ DiskSerialNumber);
end;
2: //1: DeviceIoControl( "\\.\Scsi0:"
begin
DiskSerialNumber := DeviceIoInfor.GetIDEDiskSerialNumber();
ShowMessage('Scsi0 '+ DiskSerialNumber);
end;
3: //3: GetVolumeInformationA "c:\"
begin
DiskSerialNumber := DeviceIoInfor.GetVolumeInforID();
ShowMessage('c:\ '+ DiskSerialNumber);
end;
else
DiskSerialNumber := 'Error';
ShowMessage('Error '+ DiskSerialNumber);
end;
if DiskSerialNumber <> '' then
begin
break;
end;
end;
能力值:
( LV2,RANK:10 )
21 楼
我的代码还不能用于CreateFile,因为系统调用CreateFile太频繁了,而现在的JMP方式不完善,我自己做完HOOK CreateFile的东西,不过如果把调用旧的CreateFile的那段完善一下,应该可以的。
能力值:
( LV4,RANK:50 )
22 楼
JMP -> 你的代码
首先EnterCriticalSection
然后改成以前的代码
然后进入原程序执行
执行完后LeaveCriticalSection
就OK了。
HOOK方式缺陷太多,建议放弃。。。
能力值:
( LV13,RANK:530 )
23 楼
最初由 蓝色光芒 发布 JMP -> 你的代码 首先EnterCriticalSection 然后改成以前的代码 然后进入原程序执行 执行完后LeaveCriticalSection ........
除了这种方法以外还可以挂载一个微型反汇编器 得到多于8个字节的完整汇编指令长度 处理完成以后先加载这段代码然后跳到8个字节后边的代码执行
能力值:
( LV2,RANK:10 )
24 楼
其实所有系统api 都要处理多线程同步问题, 你就当自己在写api 就行了, 入口和出口加上 多线程互斥的机制就ok 了, 和api 内部运行一样的原理