郁金香 魔兽世界技能栏逆向
c++遍历链表
读取链表数据
分析快捷栏的数组
四字节对齐就是可以整除的
调用call 执行快捷栏技能
这个call的上下层
上--快捷栏调用
下-技能ID读取 调用
进入上一层
快捷栏调用
数组逆分析复习
结构体逆向分析
读取链表数据

XDBG条件断点-分析一些固定的值是否会变动
分析快捷栏的数组

节省数据
四字节对齐就是可以整除的

快捷栏数组 和技能id
调用call 执行快捷栏技能


这个call的上下层
上--快捷栏调用
下-技能ID读取 调用
进入上一层

快捷栏调用
sub esp,0x100
lea eax,[esp+0]
mov dword ptr[eax+0x00],0
mov dword ptr[eax+0x04],0
push 19FCA234 ///字符串
push eax
push 4///快捷栏下标
call 0x005ABBC0
add esp,0x100
void 使用快捷栏(int 下标) { int pcall = 0x5ABBC0; int 参数2[3] = { 0,0 }; char 参数3[] = "LeftButton"; __asm { lea eax, 参数3 push eax lea eax, 参数2 push eax push 下标 call pcall add esp,0x0C } } VOID CALLBACK 主线_使用快捷栏(HWND h, UINT arg2, UINT_PTR arg3_id, DWORD time) { KillTimer(h, arg3_id); 使用快捷栏(3);//调用第4格快捷栏 } void CPAGE00::OnBnClickedButton4() { // TODO: 在此添加控件通知处理程序代码 printf("wowyjx OnBnClickedButton1\n");//debugview HWND 游戏窗口句柄 = FindWindowA("GxWindowClassD3d", "魔兽世界"); //printf("游戏窗口句柄=%p 行号=%d \r\n", 游戏窗口句柄, __LINE__); //::SetTimer(游戏窗口句柄, 10086, 1, 主线_遍历对象数组); //#inclue<windows.h> ::SetTimer(游戏窗口句柄, 10086, 1, 主线_使用快捷栏); } void CPAGE00::OnBnClickedButton5() { // TODO: 在此添加控件通知处理程序代码 使用快捷栏(3);//调用第4格快捷栏 printf("使用快捷栏 \n"); }
数组逆分析复习
结构体逆向分析
本文来自博客园,作者:逆向狗,转载请注明原文链接:https://www.cnblogs.com/Agtw/p/16987833.html