本帖最后由 剑仙十号 于 2018-3-23 00:08 编辑  
 
【hook】二进制,位运算库。 
  
//【鬼玺开源】TC5.0 Win32 API - 汇编调用之位运算 - 更新高速版 
//这源码带有5个参数,用来内联汇编也行。带变量的汇编,不带变量的汇编。 
//好源码做下备份。否则哪天找不到了。 
  
变量 线程ID 
功能 执行() 
  var ret = 位运算_初始化() //使用前,必须先调用一次。 
  ret = 位与(16, 16) 
  messagebox(ret) 
结束 
功能 启动_热键() 
var bool = 线程获取状态(线程ID) 
if(bool == false) 
 线程ID = 线程开启("执行", "") 
end 
结束 
功能 终止_热键() 
  线程关闭(线程ID) 
结束 
//--------------------汇编构造位运算库------------------- 
var __位运算_AsmCode = array("初始化" = false, "位或" = 0, "位与" = 0, "位反" = 0, "位异或" = 0, "位左移" = 0, "位右移" = 0) 
// 
function 位运算_初始化() //使用前,必须先调用一次。 
 
if(__位运算_AsmCode["初始化"] == false) 
  var pAsmCode, AsmCode = array() 
  AsmCode["0"] = array("short" = 1, "value" = #8B55) 
  AsmCode["1"] = array("short" = 1, "value" = #8BEC) 
  AsmCode["2"] = array("short" = 1, "value" = #0845) 
  AsmCode["3"] = array("short" = 1, "value" = #450B) 
  AsmCode["4"] = array("short" = 1, "value" = #0B0C) 
  AsmCode["5"] = array("short" = 1, "value" = #1045) 
  AsmCode["6"] = array("short" = 1, "value" = #450B) 
  AsmCode["7"] = array("short" = 1, "value" = #C914) 
  AsmCode["8"] = array("short" = 1, "value" = #10C2) 
  AsmCode["9"] = array("short" = 1, "value" = #9000) 
  AsmCode["10"] = array("short" = 1, "value" = #8B55) 
  AsmCode["11"] = array("short" = 1, "value" = #8BEC) 
  AsmCode["12"] = array("short" = 1, "value" = #0845) 
  AsmCode["13"] = array("short" = 1, "value" = #4523) 
  AsmCode["14"] = array("short" = 1, "value" = #C90C) 
  AsmCode["15"] = array("short" = 1, "value" = #10C2) 
  AsmCode["16"] = array("short" = 1, "value" = #9000) 
  AsmCode["17"] = array("short" = 1, "value" = #8B55) 
  AsmCode["18"] = array("short" = 1, "value" = #8BEC) 
  AsmCode["19"] = array("short" = 1, "value" = #0845) 
  AsmCode["20"] = array("short" = 1, "value" = #D0F7) 
  AsmCode["21"] = array("short" = 1, "value" = #C2C9) 
  AsmCode["22"] = array("short" = 1, "value" = #0010) 
  AsmCode["23"] = array("short" = 1, "value" = #5590) 
  AsmCode["24"] = array("short" = 1, "value" = #EC8B) 
  AsmCode["25"] = array("short" = 1, "value" = #458B) 
  AsmCode["26"] = array("short" = 1, "value" = #3308) 
  AsmCode["27"] = array("short" = 1, "value" = #0C45) 
  AsmCode["28"] = array("short" = 1, "value" = #4533) 
  AsmCode["29"] = array("short" = 1, "value" = #3310) 
  AsmCode["30"] = array("short" = 1, "value" = #1445) 
  AsmCode["31"] = array("short" = 1, "value" = #C2C9) 
  AsmCode["32"] = array("short" = 1, "value" = #0010) 
  AsmCode["33"] = array("short" = 1, "value" = #5590) 
  AsmCode["34"] = array("short" = 1, "value" = #EC8B) 
  AsmCode["35"] = array("short" = 1, "value" = #458B) 
  AsmCode["36"] = array("short" = 1, "value" = #8A08) 
  AsmCode["37"] = array("short" = 1, "value" = #0C4D) 
  AsmCode["38"] = array("short" = 1, "value" = #E0D3) 
  AsmCode["39"] = array("short" = 1, "value" = #C2C9) 
  AsmCode["40"] = array("short" = 1, "value" = #0010) 
  AsmCode["41"] = array("short" = 1, "value" = #5590) 
  AsmCode["42"] = array("short" = 1, "value" = #EC8B) 
  AsmCode["43"] = array("short" = 1, "value" = #458B) 
  AsmCode["44"] = array("short" = 1, "value" = #8A08) 
  AsmCode["45"] = array("short" = 1, "value" = #0C4D) 
  AsmCode["46"] = array("short" = 1, "value" = #E8D3) 
  AsmCode["47"] = array("short" = 1, "value" = #C2C9) 
  AsmCode["48"] = array("short" = 1, "value" = #0010) 
  pAsmCode = structmalloc(AsmCode) 
  if(dllcall("Kernel32.dll", "long", "VirtualProtect", "long", pAsmCode, "long", structlen(AsmCode), "long", #40, "plong", null)) 
  __位运算_AsmCode["位或"] = pAsmCode 
  __位运算_AsmCode["位与"] = pAsmCode + 19 
  __位运算_AsmCode["位反"] = pAsmCode + 33 
  __位运算_AsmCode["位异或"] = pAsmCode + 46 
  __位运算_AsmCode["位左移"] = pAsmCode + 66 
  __位运算_AsmCode["位右移"] = pAsmCode + 82 
  __位运算_AsmCode["初始化"] = true 
  end 
end 
return __位运算_AsmCode["初始化"] 
end 
// 
function 位或(参_整数1, 参_整数2, 参_整数3 = 0, 参_整数4 = 0) 
return __CallWindowProc(__位运算_AsmCode["位或"], 参_整数1, 参_整数2, 参_整数3, 参_整数4) 
end 
function 位与(参_整数1, 参_整数2) 
return __CallWindowProc(__位运算_AsmCode["位与"], 参_整数1, 参_整数2, null, null) 
end 
function 位反(参_整数) 
return __CallWindowProc(__位运算_AsmCode["位反"], 参_整数, null, null, null) 
end 
function 位异或(参_整数1, 参_整数2, 参_整数3 = 0, 参_整数4 = 0) 
return __CallWindowProc(__位运算_AsmCode["位异或"], 参_整数1, 参_整数2, 参_整数3, 参_整数4) 
end 
function 位左移(参_整数, 参_位数 = 0) 
return __CallWindowProc(__位运算_AsmCode["位左移"], 参_整数, 参_位数, null, null) 
end 
function 位右移(参_整数, 参_位数 = 0) 
return __CallWindowProc(__位运算_AsmCode["位右移"], 参_整数, 参_位数, null, null) 
end 
function __CallWindowProc(参_地址, 参_参数1, 参_参数2, 参_参数3, 参_参数4) 
return dllcall("User32.dll", "long", "CallWindowProcW", "long", 参_地址, "long", 参_参数1, "long", 参_参数2, "long", 参_参数3, "long", 参_参数4) 
end 
 
 
 
//--------------------位或-------------------- 
//nop 
//push ebp 
//mov ebp , esp 
//mov eax,dword [ebp+08h] 
//or eax,dword [ebp+0Ch] 
//or eax,dword [ebp+10h] 
//or eax,dword [ebp+14h] 
//leave  
//retn 0010h 
//90 55 8B EC 8B 45 08 0B 45 0C 0B 45 10 0B 45 14 C9 C2 10 00 
//--------------------位与-------------------- 
//nop  
//push ebp 
//mov ebp,esp 
//mov eax,[ebp+08h] 
//and eax,[ebp+0Ch] 
//leave  
//retn 0010h 
//90 55 8B EC 8B 45 08 23 45 0C C9 C2 10 00 
//--------------------位反-------------------- 
//nop 
//push ebp 
//mov ebp , esp 
//mov eax,dword [ebp+08h] 
//not eax 
//leave  
//retn 0010h 
//90 55 8B EC 8B 45 08 F7 D0 C9 C2 10 00 
//--------------------位异或-------------------- 
//nop 
//push ebp 
//mov ebp , esp 
//mov eax,dword [ebp+08h] 
//xor eax,dword [ebp+0Ch] 
//xor eax,dword [ebp+10h] 
//xor eax,dword [ebp+14h] 
//leave  
//retn 0010h 
//90 55 8B EC 8B 45 08 33 45 0C 33 45 10 33 45 14 C9 C2 10 00 
//--------------------位左移-------------------- 
//nop 
//push ebp 
//mov ebp , esp 
//mov eax,dword [ebp+08h] 
//mov cl,byte [ebp+0Ch] 
//shl eax,cl 
//leave  
//retn 0010h 
//90 55 8B EC 8B 45 08 8A 4D 0C D3 E0 C9 C2 10 00 
//--------------------位右移-------------------- 
//nop 
//push ebp 
//mov ebp , esp 
//mov eax,dword [ebp+08h] 
//mov cl,byte [ebp+0Ch] 
//shr eax,cl 
//leave  
//retn 0010h 
//90 55 8B EC 8B 45 08 8A 4D 0C D3 E8 C9 C2 10 00 |