qq连连看分析编写简单辅助

1。打开游戏查看特征 发现不是真正的exe程序
qq连连看分析编写简单辅助
qq连连看分析编写简单辅助
发现这个才是
qq连连看分析编写简单辅助
找特征 先到代码段搜索字符串 找到一些打开浏览器
qq连连看分析编写简单辅助
都下断
qq连连看分析编写简单辅助
qq连连看分析编写简单辅助
运行发现断不下来 ,那就到每个call里下断
qq连连看分析编写简单辅助
再次运行断下来了 但这个是一个死循环
qq连连看分析编写简单辅助
这个才是点击游戏的回调
qq连连看分析编写简单辅助
f8 出现可疑字符串
qq连连看分析编写简单辅助
继续 又出现可疑字符串
qq连连看分析编写简单辅助
到文件里改名运行试试 果然是的
qq连连看分析编写简单辅助
但是再次启动最开始那个程序报错
qq连连看分析编写简单辅助
不管它直接分析新程序
qq连连看分析编写简单辅助
先查壳 压缩壳直接脱
qq连连看分析编写简单辅助
运行程序查看特点 查看行为 等发现它创建一个进程打开真正的程序
下断 CreateProcessA
qq连连看分析编写简单辅助
发现了真的程序
qq连连看分析编写简单辅助
运行程序 但是有报错
直接上火绒剑查打开它的程序 看有哪些行为
qq连连看分析编写简单辅助
直接手动改
qq连连看分析编写简单辅助
到这里就可以直接用了 现在就开始写辅助先分析
先查特点
1.有声音
2.有道具
3.相同的去掉
4.有时间
qq连连看分析编写简单辅助
我的思路是先找到×××或者×××的回调函数,不管那么多先从声音文件开始(×××的声音的文件是:
qq连连看分析编写简单辅助
到代码段查字符串
qq连连看分析编写简单辅助
下断
qq连连看分析编写简单辅助
当有×××的时候同时点击×××就会断下然后查看调用栈

qq连连看分析编写简单辅助
然后再分析下一些关键断点
qq连连看分析编写简单辅助
以找到了一个关跳 意思是如果俩个是相等的就会消掉
qq连连看分析编写简单辅助
nop试试
qq连连看分析编写简单辅助
果然是的 发现只要第一下点击×××然后随便点下 就会有增加
qq连连看分析编写简单辅助
现在开始找它为什么会增 也就是说它的增加的函数
通过上面有的断点发现如果是点击的是的道具框总是会调用这个函数 同时发现都是调用的一个函数
qq连连看分析编写简单辅助
进入函数看看原来是个道具减少函数
qq连连看分析编写简单辅助
修改下 把减少改成增加
qq连连看分析编写简单辅助
果然
qq连连看分析编写简单辅助
同样找到了真正的增加函数

qq连连看分析编写简单辅助
现在回过来找它是怎么调用的 发现一些 f1 f4等等
qq连连看分析编写简单辅助
刚才有分析它的增加减少函数 很定有对内存操作查看内存
qq连连看分析编写简单辅助
qq连连看分析编写简单辅助
找到了这些 那就再分析 哪个是×××啊 发现是f4
这里出现了错误分析 条件断点不断点下来 但是找到了上面有个关键函数 是一个道具分发 因为所有道具最终调的一个函数
qq连连看分析编写简单辅助
qq连连看分析编写简单辅助
重点来了那就慢慢分析这些参数 点下×××
qq连连看分析编写简单辅助
这里发现有一个地址哪都能看到 随便到个地方看看
qq连连看分析编写简单辅助
那应该是一个对象的基址 到调用栈往上层跟 一直有 可能也是个全局的用ce搜下 发现几个全局 (绿色)那就先保存再试
qq连连看分析编写简单辅助
目前找到了三个点 ×××的增减 道具分发函数 点击图片判断是否相等
同样思路 可以找到定时函数这里找到了判断跳转:如果时间到了就结束弹框
qq连连看分析编写简单辅助
这里打到了跳转直接改了(分析发现是如果相等就做一些准备工作可以是加载失败框什么的 其它情况一直是不等于 改成jmp)
qq连连看分析编写简单辅助

qq连连看分析编写简单辅助
成功
qq连连看分析编写简单辅助
这里就简单的分析了下分析 报告:

12ac5a   ×××地址12AC7E
对比
0041B1CE    E8 AD4BFFFF     CALL kyodai.0040FD80                     ; 都走
0041B1D3    8A45 E8         MOV AL,BYTE PTR SS:[EBP-0x18]
0041B1D6    3845 D4         CMP BYTE PTR SS:[EBP-0x2C],AL
0041B1D9    90              NOP                                      ; 不相等这里跳过
0041B1DA    90              NOP
0041B1DB    90              NOP
0041B1DC    90              NOP
0041B1DD    90              NOP
0041B1DE    90              NOP
0041B1DF    80BE 48090000 D>CMP BYTE PTR DS:[ESI+0x948],0xD4
0041B1E6    0F85 CA010000   JNZ kyodai.0041B3B6                      ; 相等这里跳过
0041B1EC    FF75 E4         PUSH DWORD PTR SS:[EBP-0x1C]
0041B1EF    8BCE            MOV ECX,ESI
0041B1F1    FF75 E0         PUSH DWORD PTR SS:[EBP-0x20]
0041B1F4    E8 076E0000     CALL kyodai.00422000

增加道具函数
0041B487    FF75 D8         PUSH DWORD PTR SS:[EBP-0x28]
0041B48A    E8 89D90000     CALL kyodai.00428E18
0041B48F    85C0            TEST EAX,EAX
0041B491    59              POP ECX                                  ; 0012A1F4
0041B492    74 0A           JE SHORT kyodai.0041B49E
0041B494    FF75 D8         PUSH DWORD PTR SS:[EBP-0x28]
0041B497    8BCE            MOV ECX,ESI
0041B499    E8 DB240000     CALL kyodai.0041D979                     ; 增加×××函数
0041B49E    8B8E 841E0000   MOV ECX,DWORD PTR DS:[ESI+0x1E84]
0041B4A4    53              PUSH EBX
0041B4A5    53              PUSH EBX
减少×××函数
0042AA97    C1E0 04         SHL EAX,0x4
0042AA9A    03C7            ADD EAX,EDI
0042AA9C    90              NOP
0042AA9D    90              NOP
0042AA9E    90              NOP
0042AA9F    90              NOP
0042AAA0    66:3958 06      CMP WORD PTR DS:[EAX+0x6],BX
0042AAA4    7F 0B           JG SHORT kyodai.0042AAB1
0042AAA6    3958 0C         CMP DWORD PTR DS:[EAX+0xC],EBX

增加×××函数
0042AA6D    8858 05         MOV BYTE PTR DS:[EAX+0x5],BL
0042AA70    66:FF40 06      INC WORD PTR DS:[EAX+0x6]
0042AA74    0FBF40 06       MOVSX EAX,WORD PTR DS:[EAX+0x6]
0042AA78    EB 02           JMP SHORT kyodai.0042AA7C
0042AA7A    33C0            XOR EAX,EAX

关键函数
0041AF11    E8 F32E0000     CALL kyodai.0041DE09
0041AF16    8D45 0C         LEA EAX,DWORD PTR SS:[EBP+0xC]
0041AF19    8BCE            MOV ECX,ESI                              ; 函数3
0041AF1B    50              PUSH EAX
0041AF1C    E8 A8590000     CALL kyodai.004208C9
0041AF21    8BF8            MOV EDI,EAX
0041AF23    8D45 0C         LEA EAX,DWORD PTR SS:[EBP+0xC]
0041AF26    50              PUSH EAX
0041AF27    8BCE            MOV ECX,ESI                              ; 标签2
0041AF29    E8 D8140000     CALL kyodai.0041C406
0041AF2E    50              PUSH EAX
0041AF2F    57              PUSH EDI
0041AF30    8BCE            MOV ECX,ESI
0041AF32    E8 C9310000     CALL kyodai.0041E100
0041AF37    5F              POP EDI                                  ; kyodai.0041AF2E
0041AF38    FF75 10         PUSH DWORD PTR SS:[EBP+0x10]
0041AF3B    803D 848D4500 0>CMP BYTE PTR DS:[0x458D84],0x0
0041AF42    8BCE            MOV ECX,ESI
0041AF44    FF75 0C         PUSH DWORD PTR SS:[EBP+0xC]
0041AF47    FF75 08         PUSH DWORD PTR SS:[EBP+0x8]
0041AF4A    74 07           JE SHORT kyodai.0041AF53                 ; 如果俩个相等
0041AF4C    E8 7B090000     CALL kyodai.0041B8CC
0041AF51    EB 05           JMP SHORT kyodai.0041AF58
0041AF53    E8 05000000     CALL kyodai.0041AF5D                     ; 音乐
0041AF58    5E              POP ESI                                  ; kyodai.0041AF2E
0041AF59    5D              POP EBP                                  ; kyodai.0041AF2E
0041AF5A    C2 0C00         RETN 0xC                                 ; 这里返回
0041AF5D    B8 5C744400     MOV EAX,kyodai.0044745C                  ; 父%E
0041AF62    E8 F9CD0100     CALL kyodai.00437D60
0041AF67    81EC A0010000   SUB ESP,0x1A0
0041AF6D    53              PUSH EBX                                 ; kyodai.0040CA97
0041AF6E    56              PUSH ESI

//动画
68A2EB18    FFD0            CALL EAX  

68A2EB1A    85C0            TEST EAX,EAX
68A2EB1C    74 73           JE SHORT mfc42.68A2EB91
68A2EB1E    837D FC 00      CMP DWORD PTR SS:[EBP-0x4],0x0
68A2EB22    74 28           JE SHORT mfc42.68A2EB4C
68A2EB24    8B43 04         MOV EAX,DWORD PTR DS:[EBX+0x4]
68A2EB27    3D 18010000     CMP EAX,0x118
68A2EB2C    74 07           JE SHORT mfc42.68A2EB35
68A2EB2E    3D 04010000     CMP EAX,0x104
68A2EB33    75 17           JNZ SHORT mfc42.68A2EB4C
68A2EB35    6A 01           PUSH 0x1
68A2EB37    8BCE            MOV ECX,ESI
68A2EB39    E8 3CD1FDFF     CALL mfc42.#6215
68A2EB3E    8BCE            MOV ECX,ESI

//定时
0040F502    8B06            MOV EAX,DWORD PTR DS:[ESI]                    ; kyodai.0044CE70
0040F504    8BCE            MOV ECX,ESI
0040F506    FF50 30         CALL DWORD PTR DS:[EAX+0x30]
0040F509    39BE C0000000   CMP DWORD PTR DS:[ESI+0xC0],EDI
0040F50F    EB 12           JNZ SHORT kyodai.0040F523   //JMP                   ; 时间
0040F511    8B06            MOV EAX,DWORD PTR DS:[ESI]                    ; kyodai.0044CE70
0040F513    8BCE            MOV ECX,ESI
0040F515    FF50 14         CALL DWORD PTR DS:[EAX+0x14]
0040F518    85C0            TEST EAX,EAX
0040F51A    74 07           JE SHORT kyodai.0040F523

辅助源码 (dll 要注入进去)

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
#include <windows.h>

void fun()
{
    /*

    0012A1F4=this=[0x47FDE0]

    0012A688=ecx=[this+0x494]

    0041DE4D  |.  8B86 94040000 mov eax,dword ptr ds:[esi+0x494]         ;  123.0044CE70
    0041DE53  |.  8D8E 94040000 lea ecx,dword ptr ds:[esi+0x494]         ;  0012A688
    0041DE59  |.  52            push edx
    0041DE5A  |.  53            push ebx
    0041DE5B  |.  53            push ebx
    0041DE5C  |.  FF50 28       call dword ptr ds:[eax+0x28]             ;  道具事件分发

    00129DBC   00000000
    00129DC0   00000000
    00129DC4   000000F4 是×××
    */

    int BaseAddr = 0x47FDE0;
    int m_Esi = *(int*)BaseAddr;
    _asm
    {
        mov esi, [m_Esi];
        mov eax, dword ptr ds : [esi + 0x494];
        lea ecx, dword ptr ds : [esi + 0x494];
        push 0xf4;
        push ebx;
        push ebx;
        call dword ptr ds : [eax + 0x28];
    }

}

LRESULT CALLBACK WindowProc(
    _In_  HWND hwnd,
    _In_  UINT uMsg,
    _In_  WPARAM wParam,
    _In_  LPARAM lParam
)
{
    switch (uMsg)
    {
    case WM_CREATE:
    {
        // 创建一个按钮
        CreateWindow(L"Button",
            L"清除一个",
            WS_CHILD | WS_VISIBLE | WS_BORDER,
            0, 0, 80, 25,
            hwnd,
            (HMENU)0x1008,
            0, 0);
        // 创建一个按钮
        CreateWindow(L"Button",
            L"全部清除",
            WS_CHILD | WS_VISIBLE | WS_BORDER,
            0, 30, 80, 25,
            hwnd,
            (HMENU)0x1009,
            0, 0);

    }
    case WM_COMMAND:
    {
        WORD HiwParam = HIWORD(wParam);//高两字节:控件通码
        WORD LowParam = LOWORD(wParam);//低两字节:控件id

                                       //清除一个
        if (HiwParam == BN_CLICKED&&LowParam == 0x1008)
        {
            fun();
            return 1;
        }
        if (HiwParam == BN_CLICKED&&LowParam == 0x1009)
        {
                //0041CB72 | .  8B8E 841E0000 mov ecx, dword ptr ds : [esi + 0x1E84]
                //0041CB7B | .E8 57C60000   call <123.返回剩余方块个数>
                //for fun sleep(100)
                    //for(;;){
                    //fun();
                    //}

            return 1;
        }
    }break;
    case WM_CLOSE:
    {
        EndDialog(hwnd, 0);
        ExitProcess(0);
        return 0;
    }
    default:break;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
DWORD WINAPI DoCreateDialog(LPVOID lpParameter)
{
    MSG msg;
    WNDCLASS wndclass = { 0 };
    HMODULE hinstance = GetModuleHandleW(0);
    wndclass.style = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = WindowProc;
    wndclass.hInstance = hinstance;
    wndclass.hIcon = 0;
    wndclass.lpszClassName = L"qqllk";
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    RegisterClass(&wndclass);  //注册窗口

    HWND hwnd = CreateWindowW(
        L"qqllk", TEXT("qqllk助手"),
        WS_POPUP | WS_BORDER | WS_CAPTION | WS_SYSMENU, 0,
        0, 100, 100,
        0, 0, hinstance, 0);
    ShowWindow(hwnd, 5);
    UpdateWindow(hwnd);

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.lParam;
}

void funA()
{
    HANDLE ht = CreateThread(0, 0, DoCreateDialog, 0, 0, 0);
}

/*
思路一 : 指南针 配合清除函数
思路二 : 查找×××函数

1.根据ce 搜索到减少道具数值的地方
2.跟出减少道具数值函数
3.来到 调用减少道具数值函数的地方
4. 查找是谁调用的减少道具数值函数
5.即可找到关键点  道具分发函数  f0-fb 间
6.可以通过该函数调用多个道具
*/

BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    static bool Onec = 0;

    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
        if (Onec == 0)
        {
            funA();
        }
        Onec = 1;
        break;
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

qq连连看分析编写简单辅助

转载于:https://blog.51cto.com/haidragon/2121880

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值