C/C++知识点之qq连连看分析编写简单辅助
小标 2019-06-10 来源 : 阅读 1019 评论 0

摘要:本文主要向大家介绍了C/C++知识点之qq连连看分析编写简单辅助,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之qq连连看分析编写简单辅助,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C/C++知识点之qq连连看分析编写简单辅助

1。打开游戏查看特征 发现不是真正的exe程序 

发现这个才是

找特征 先到代码段搜索字符串 找到一些打开浏览器

都下断

运行发现断不下来 ,那就到每个call里下断

再次运行断下来了 但这个是一个死循环

这个才是点击游戏的回调

f8  出现可疑字符串

继续 又出现可疑字符串

到文件里改名运行试试 果然是的

但是再次启动最开始那个程序报错 

不管它直接分析新程序 

先查壳  压缩壳直接脱

运行程序查看特点  查看行为 等发现它创建一个进程打开真正的程序
下断 CreateProcessA

发现了真的程序

运行程序 但是有报错
直接上火绒剑查打开它的程序 看有哪些行为

直接手动改

到这里就可以直接用了 现在就开始写辅助先分析 
先查特点 
1.有声音
2.有道具
3.相同的去掉
4.有时间

我的思路是先找到×××或者×××的回调函数,不管那么多先从声音文件开始(×××的声音的文件是:

到代码段查字符串

下断

当有×××的时候同时点击×××就会断下然后查看调用栈



然后再分析下一些关键断点

以找到了一个关跳  意思是如果俩个是相等的就会消掉 

nop试试

果然是的 发现只要第一下点击×××然后随便点下 就会有增加

现在开始找它为什么会增 也就是说它的增加的函数
通过上面有的断点发现如果是点击的是的道具框总是会调用这个函数 同时发现都是调用的一个函数

进入函数看看原来是个道具减少函数

修改下 把减少改成增加

果然

同样找到了真正的增加函数



现在回过来找它是怎么调用的  发现一些 f1 f4等等

刚才有分析它的增加减少函数 很定有对内存操作查看内存

找到了这些 那就再分析 哪个是×××啊  发现是f4
这里出现了错误分析 条件断点不断点下来 但是找到了上面有个关键函数 是一个道具分发  因为所有道具最终调的一个函数

重点来了那就慢慢分析这些参数 点下×××

这里发现有一个地址哪都能看到 随便到个地方看看

那应该是一个对象的基址 到调用栈往上层跟 一直有 可能也是个全局的用ce搜下 发现几个全局 (绿色)那就先保存再试

目前找到了三个点 ×××的增减  道具分发函数 点击图片判断是否相等 
同样思路 可以找到定时函数这里找到了判断跳转:如果时间到了就结束弹框

这里打到了跳转直接改了(分析发现是如果相等就做一些准备工作可以是加载失败框什么的 其它情况一直是不等于 改成jmp)



成功

这里就简单的分析了下分析 报告:


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(;;){         

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程