能力值:
( LV2,RANK:10 )
|
-
-
2 楼
找个dll,定位到这个函数提取特征,去目标程序搜索
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
他调用是libcurl库,直接编译到程序中
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
d37K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6@1L8%4m8A6j5%4y4Q4x3V1k6D9K9h3u0U0N6i4u0D9i4K6t1$3L8X3u0K6M7q4)9K6b7W2!0q4y4g2!0n7b7g2)9&6y4q4!0q4z5q4!0m8c8W2!0m8y4g2!0q4y4W2)9&6z5q4!0m8c8W2!0q4y4g2!0n7y4g2)9^5b7#2!0q4y4g2)9^5y4g2!0m8y4g2!0q4z5q4!0n7c8W2)9&6z5g2!0q4y4q4!0n7z5q4!0m8b7g2!0q4y4g2!0n7b7g2)9&6x3H3`.`.
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
dll我也找了一个,然后如何找相对地址
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
基地址应该是这样,uint64_t base_addr = (uint64_t)GetModuleHandleA(NULL); 就是后面的对应函数的偏移量是多少
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
PathOfExile.exe+0x2125090
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
|
能力值:
( LV4,RANK:45 )
|
-
-
9 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
git上两个开源的lumina服务器已经不适用最新的ida8.3了,协议改动了。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
感谢各位大神,现在这个地址貌似是对的,但是用delphi代码去验证是否对的时候,64位程序总是不停崩溃,网上查资料说是delphi和c++的fastcall函数调用方式不一致,需要对齐,但是不知道如何对齐,不知道是验证程序问题还是地址可能有错。这个问题属于衍生问题,当一起解决后,我会另外开贴单独补雪花,方才试了下,不能直接编辑雪花值,只能再开新帖后面。代码如下 var curl_easy_setoptCallNext: function(handle : int64; option : int64; params: int64) : Int64; register;
function curl_easy_setoptWrap(handle : int64; option : int64; params: int64) : Int64; register; begin Result := curl_easy_setoptCallNext(handle, option, params); Writelog('my.log', 'call option='+inttostr(option); end;
function curl_easy_setoptCallBack : Int64; register; asm MOV EdX,ECX //网上拷贝的对齐方法,可能是错的 JMP curl_easy_setoptWrap end;
var p1: Pointer; p1 := Pointer(GetModuleHandleA(nil)+$2125090); HookCode(p1, @curl_easy_setoptCallBack, @curl_easy_setoptCallNext);
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
我先结贴,然后贴个c的代码,大神帮忙看下这个定义对不对, pascal的我另外开贴,先搞c的 #include <stdint.h> #include "minhook/include/MinHook.h"
typedef uint16_t(__fastcall* curl_easy_setopt_direct_t)(uint64_t handle, uint8_t option, uint64_t param); curl_easy_setopt_direct_t curl_easy_setopt_direct = NULL;
HMODULE g_hmod = NULL; uint64_t curl_dedupe_addr = 0;
uint16_t __fastcall curl_easy_setopt_hooked(uint64_t handle, uint8_t option, uint64_t params) { return curl_easy_setopt_direct(handle, option,params); }
void initialize() { // set up function hooks uint64_t base_addr = (uint64_t)GetModuleHandleA(NULL); curl_dedupe_addr = base_addr + 0x2125090;
MH_Initialize(); MH_CreateHook((LPVOID)curl_dedupe_addr, &curl_easy_setopt_hooked, (LPVOID*)&curl_easy_setopt_direct); MH_EnableHook((LPVOID)curl_dedupe_addr);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReversed) { switch (fdwReason) { case DLL_PROCESS_ATTACH: g_hmod = hinstDLL; initialize();
break; case DLL_PROCESS_DETACH: MH_Uninitialize(); break; }
return TRUE; } 正确定义是
typedef uint64_t(__fastcall* curl_easy_setopt_direct_t)(uint64_t handle, uint64_t option, uint64_t param);?
|
|
|