- 博客(34)
- 收藏
- 关注
原创 模仿Cheat Engine内存搜索——(Sunday算法)
想要获取一个进程里面的某个数据,需要先知道这个数据的位置 对于全局变量:偏移是固定的,可以通过“基址+偏移”直接定位 对于局部变量:位置是随机的,只能通过拦截或者搜索去定位分析企业微信的时候,发现很多数据都不是全局变量,不能像个人微信那样直接跨进程读取。如果能够用代码模仿Cheat Engine进行内存搜索,就可以定位到局部变量,进而实现非注入读取。甚至可以做到兼容所有版本(比如登录二维码,直接内存扫描出来)。 Cheat Engine是开源的,下面是特征码搜索的源码:DWORD AO
2021-07-29 10:00:13
1336
原创 Skynet学习笔记(三)编译运行
1.下载源码$ git clone https://github.com/cloudwu/skynet.git2.skynet代码目录结构3rd #第三方支持库,包括LUA虚拟机,jmalloc等lualib #lua语言封装的常用库,包括http、md5lualib-src #将c语言实现的插件捆绑成lua库,例如数据库驱动、bson、加密算法等service #使用lua写的Skynet的服务模块service-src #使用C写的Skynet的服务模块
2021-03-29 20:04:34
358
原创 Skynet学习笔记(二)整体架构
Skynet对象关系 一个集群,可以有多个节点 一个节点,对应一个进程,有IP和Port 一个节点,可以有多个服务,一个服务就是一个lua虚拟机 一个节点启动时,会初始化多个调度线程,用于调度多个服务的消息 一个服务接受到一个消息时,会创建一个协程来处理这个消息(co_create)Skynet消息调度 每个在线客户的客户端,在skynet server上都对应有一个socket与其连接。 一个socket在skynet内部对应一个lua虚拟机和一个客户特定消息队列(per c
2021-03-29 20:02:02
314
1
原创 Skynet学习笔记(一)简介
Skynet起源 Skynet起源于云风在简悦研发的第一个项目,研发的过程记录在博客里面,这个研发笔记第一次提到skynet 是框架的开发代号。Skynet综述 Skynet 设计综述提到Skynet核心解决什么问题,不解决什么问题以及核心功能设计细节Skynet 核心解决什么问题 需求:希望游戏服务器(但 skynet 不仅限于用于游戏服务器)能够充分利用多核优势,将不同的业务放在独立的执行环境中处理,协同工作。做为核心功能,Skynet 仅解决一个问题: 把一个符合规范的 C 模块
2021-03-29 19:56:51
1214
原创 Chrome Extension 入门教程(四)调试
三种脚本弹出页脚本:popup后台脚本:backgroup内容脚本:contentscriptpopup.js插件图标,点击右键,再点击“审查弹出内容”就可以下断点调试了background.js控件界面,点击查看视图后面的“xxx”就可以下断点调试了content script按F12进入调试模式,点击打开文件(open file)输入要调试的js文件名字就可以下断点调试了...
2021-02-27 15:52:01
2098
原创 Chrome Extension 入门教程(三)通讯
三种脚本弹出页脚本:popup后台脚本:backgroup内容脚本:contentscript短连接popup <-> backgroundpopup可以直接调用background中的JS方法,也可以直接访问background的DOM// background.jsfunction test(){ alert('我是background!');}// popup.jsvar bg = chrome.extension.getBackgroundPage();bg.
2021-02-27 15:50:52
733
原创 Chrome Extension 入门教程(二)例子
1、只有最基本信息manifest.json{ "manifest_version":3, "name":"manifest", "version" : "1.0.0", "description": "demo manifest"}2、右上角显示图标manifest.json{ "manifest_version":3, "name":"manifest", "version" : "1.0.0", "description": "demo manifest", "act
2021-02-27 15:47:26
851
原创 Chrome Extension 入门教程(一)概述
概述Chrome Extension 直译是“谷歌浏览器扩展”(大多人习惯说“谷歌浏览器插件”),也就是给谷歌浏览器添加辅助功能。所用到的技术是web,包括html,css和js。同时,Chrome 也提供了丰富的api,方便扩展Chrome的功能。基本组成首先是要配置这个扩展的基本信息,对应的文件是manifest.json点击扩展的图标,可以弹出一个临时的窗口 ,对应的模块是popup除了临时的popup,还可以写常驻的后台脚本,对应的模块是background也可以往网页注入自己的脚本,方
2021-02-27 15:44:05
12236
原创 断点拦截局部数据
目录零、原理简介一、调试进程二、设置断点三、监听消息四、处理异常 逆向开发经常有这个需求:拦截局部数据。一般的做法是hook,通过修改代码的流程来获得数据。还有一种办法是下断点调试。这里聊聊怎样通过下断点来拦截局部数据。零、原理简介 下断点拦截数据,原理就是对目标进程进行下断点调试。 设置断点的原理就是在某个地址写入0xCC。对某个地址设置断点之后,当被调试的目标进程运行到这个地址,就会报错抛出异常给我们的调试进程。我们的调试进程就可以拿到当前的环境数据。 拿到数据之后,就要让目标进程继续
2021-02-05 10:32:02
237
原创 Duilib 源码分析(五)绘制管理器
前言 带界面软件可以分两部分:界面显示和消息处理。前面介绍了界面解析绘制和消息处理,而绘制管理器类(CPaintManagerUI)两部分都管理:处理了大部分的绘制工作、控件消息分发处理。示例class CDuilibWnd : public CWindowWnd, public INotifyUI{public:// 重写CWindowWnd::HandleMessage处理消息virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam,
2021-01-29 14:31:21
337
原创 Duilib 源码分析(四)控件绘制
渲染引擎CRenderEngine:封装GDI//duilib-master\DuiLib\Core\UIRender.hclass DUILIB_API CRenderEngine{ DrawLine //绘制直线 DrawRect //绘制直角边框 DrawRoundRect //绘制圆角边框 DrawImage //绘制图片 DrawColor //绘制纯色 DrawGradient
2021-01-29 14:25:28
708
原创 Duilib 源码分析(三)界面解析
例子CPaintManagerUI m_PaintManager;CDialogBuilder builder;CControlUI* pRoot;pRoot = builder.Create(_T("duilib.xml"), (UINT)0, NULL, &m_PaintMana);m_PaintManager.AttachDialog(pRoot);CDialogBuilder头文件// 创建界面的回调函数class IDialogBuilderCallback{publ
2021-01-29 14:18:23
569
原创 Duilib 源码分析(二)消息处理
入口函数是_tWinMainint APIENTRY _tWinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nShowCmd){ // 绘制管理器CPaintManagerUI绑定窗口句柄 CPaintManagerUI::SetInstance(hInstance); // 绘制管理器CPaintManag
2021-01-29 14:14:33
446
原创 Duilib 源码分析(一)示例推演
Duilib源码下载地址 官网地址:https://github.com/duilib/duilib 源码下载地址https://github.com/duilib/duilib/archive/master.zipDuilib示范例子 使用Duilib编写一个界面软件,本质上还是一个Win32的软件,只不过这个软件的界面不使用Windows自带的控件,而是交给Duilib绘制界面。 关于消息处理,底层还是处理Window消息,但Duilib会进一步转化成Duilib消息,方便编写响应的逻
2021-01-29 14:09:26
1338
原创 2021 Duilib最新入门教程(七)Duilib处理消息
目录前言例子小结前言 在前面有提到:使用Duilib编写一个界面软件,本质上还是一个Win32的软件,只不过这个软件的界面不使用Windows自带的控件,而是交给Duilib绘制界面。 关于消息处理,底层还是处理Window消息,但Duilib会进一步转化成Duilib消息,方便编写响应的逻辑。 例子// 界面上显示一个按钮 按钮名字为btn<Button name="btn" text="按钮" />// 点击按钮,会激活按钮控件,然后产生消息:DUI_MSGTYPE_
2021-01-24 12:20:46
620
原创 2021 Duilib最新入门教程(六)Duilib界面设计
目录前言控件容器总结前言 在前面有提到:用Duilib写一个界面软件,只需要用一个xml文件描述界面长什么样,然后在代码中写上操作界面之后怎么处理就可以了。 “描述界面长什么样”其实就是描述:1、这个界面上有哪些控件?2、这些控件是怎么布局的?这一篇先介绍Duilib自带的标准控件有哪些?然后再介绍这些控件是怎么布局的? 控件 控件指最基本的单元模块,比如:按钮、文本、编辑框等等。Duilib控件之间的继承关系如下: 举个例子 界面上显示一个按钮 按钮名字为"btn" 按钮
2021-01-24 12:15:14
1208
原创 2021 Duilib最新入门教程(五)Duilib调用静态库示例
目录原理步骤原理 静态库文件后缀名是lib,编译的时候合并到软件里面去。 调用静态库需要两件套:1、头文件2、静态库。 特殊的地方:调用Duilib的静态库时,需要先定义静态宏(#define UILIB_STATIC) 步骤 1、新建项目,选择“Windows 桌面应用程序” 2、项目名字定为DuilibMinDemoStatic 3、选择“桌面应用程序”和“空项目” 4、添加Duilib头文件所在的目录 5、复制静态库DuiLib_Static_
2021-01-24 11:20:28
636
原创 2021 Duilib最新入门教程(四)Duilib编译静态库
1、复制DuiLib.vcxproj.filters 2、修改成DuiLib_Static.vcxproj.filters 3、Duilib源码的工程中添加现有项目 4、选择duilib-master\DuiLib\DuiLib_Static.vcxproj 5、这里看到使用的是Visual Studio 2012 6、在DuiLib_Static项目,点击鼠标右键,然后点击属性 7、配置改为所有配置,平台工作集改为2019 8、选择 UnicodeD
2021-01-24 10:37:40
499
原创 源文件(cpp)、静态库(lib)、动态库(dll)
背景一个函数想要调用另一个函数1、同个文件最简单的办法就是调用的函数和被调用的函数写在同个文件中void CalledFunction() // 被调用的函数{ ...}void CallFunction() // 调用的函数{ CalledFunction() // 调用被调用的函数}2、源文件把被调用的函数写在另外一个文件头文件(被调用函数的声明)源文件(被调用函数的定义)// Called.h 头文件void CalledFunction();
2021-01-22 20:07:37
747
原创 2021 Duilib最新入门教程(三)Duilib调用动态库示例
目录原理步骤 先介绍下Duilib例子的相关原理,有个大概的认识,再列举具体的步骤。原理 使用Duilib编写一个界面软件,本质上还是一个Win32的软件,只不过这个软件的界面不使用Windows自带的控件,而是交给Duilib绘制界面。 关于消息处理,底层还是处理Window消息,但Duilib会进一步转化成Duilib消息,方便编写响应的逻辑。 基本流程: Win32的入口函数:_tWinMain Duilib生成界面:CDialogBuilder Dui
2021-01-22 17:37:14
926
原创 2021 Duilib最新入门教程(二)Duilib编译动态库
目录下载源码编译工具编译源码下载源码 官网地址:https://github.com/duilib/duilib 也可以直接点击源码下载地址https://github.com/duilib/duilib/archive/master.zip 编译工具 Visual Studio 2019 编译源码1、进入duilib-master目录,点击DuiLib.sln 2、重定向项目,点击确认 3、这里显示的还是2013,需要改为2019 4、进入属性面板:项
2021-01-22 17:28:24
917
原创 2021 Duilib最新入门教程(一)Duilib简介
目录Duilib解决什么问题?方案一、自己画界面方案二、使用标准控件方案三、使用Duilib框架Duilib是什么?先看下[Duilib官方简介](https://github.com/duilib/duilib/blob/master/README.md)再看下[DirectUI 百度百科](https://baike.baidu.com/item/directui) 比起介绍“Duilib是什么?”,更重要的应该是了解“Duilib解决什么问题?” Duilib解决什么问题?先聊聊一个话题:怎
2021-01-22 16:43:42
3467
原创 Windows逆向分析入门(九)——实战篇(内存直接读取通讯录)
前言上一篇,聊到函数的调用关系是一条线的。这一篇,聊下函数的调用关系是分叉的,应该怎么分析。目的是内存直接读取通讯录。分析通讯录,是数据。全局数据直接读取,局部数据间接拦截。通讯录要经常用到,写成全局数据,方便读取。看着和个人信息一样,是全局数据,内存里直接搜索。但用什么搜索呢?并没有一个明确的数据可以代表通讯录。一般说,通讯录里面有很多好友信息,要获取某个好友信息,在里面搜索。也就是说,通讯录可以是一个数组,链表,或者一棵树,而这个集合的开头写成全局数据。切入点从获取某个好友的信息入
2020-06-27 19:23:19
595
原创 Windows逆向分析入门(八)——实战篇(收发文本消息)
前言这一篇,用到找偏移的第三个方法:日志;第四个方法:字符串;第五个方法:系统函数;第六个方法:第三方库。目标是收发文本消息。一、发送消息分析1、发送信息的一般流程1、界面上编辑消息2、点击发送按钮3、消息存入数据库4、通过网络发送出去2、可以切入的点1、界面2、数据库3、网络发送函数3、入手方式界面入手,得跟踪Duilib的响应过程数据库入手,得监听数据库Sqlite的函数网络函数入手,数据依据加密了,难识别出来数据从产生到发送,中间会有比较长的过程。看下日志有没有可以
2020-06-27 18:47:02
826
1
原创 Windows逆向分析入门(七)——实战篇(刷新二维码)
前言这一篇,用到找偏移的第二个方法:界面;第四个方法:字符串;第六个方法:第三方库。目标是刷新二维码。DuilibWX的界面模块是第三方库:Duilib。关于Duilib的介绍和分析,已经分享了《Dump微信PC端的界面Duilib文件》。这里梳理一下Duilib的主要流程:1、Duilib加载配置文件,生成界面。2、用户点击界面的的按钮,会产生click事件。3、Duilib接收到事件,会判断是点个哪个按钮,然后触发对应的函数。4、比如发送按钮,配置文件里面是"send_btn",判断代
2020-06-27 11:58:26
1190
原创 Windows逆向分析入门(六)——实战篇(用户信息)
前言这一篇,开始实战。用到找偏移的第一个方法:内存搜索。目的是获得用户信息。一、找偏移1、分析用户信息,属于获得数据。全局数据搜索,局部数据拦截。对于经常用到,又不怎么变动的数据,用全局变量会比较方便。用户信息,基本不会变动,也很多地方会用到,猜测是用全局变量存储。2、方法对于全局变量,用CE进行内存搜索,看能不能找到。3、验证1、看下自己的登陆信息2、用CE搜索用户名搜索结果有绿色的,说明偏移是固定。3、看下内存附近信息也有省份这些信息,说明个人信息是存在一起的4
2020-06-27 11:11:55
657
2
原创 Windows逆向分析入门(五)——工具篇
前言 老话,工欲善其事,必先利其器。这篇聊聊逆向分析用到的工具。不聊工具细节,自行百度学习。重要的是理清:使用工具,是为了解决什么问题。工具 1、CE 找偏移的方法中聊到,最直接就是在内存里面搜索。 CE(CheatEngine又称CE修改器),就是用来搜索内存里面东西,得到内存地址。 2、IDA 逆向分析,我们拿到手的是已经编译好的软件,看不了代码。 要是能把软件恢复成代码,分析起来就方便多了。 IDA这个工具,就是用来把软件恢复成代码的。
2020-06-27 11:08:37
815
原创 Windows逆向分析入门(四)——代码篇
前言 找到偏移之后,就是写辅助工具了。这一篇聊聊写辅助工具的原理。具体的代码细节,等到实战会展开细说。明确一下 逆向两个目的 1、调用功能 2、获取数据对应的实现方法 1、调用功能 找到偏移,直接调用。 2、获取数据 对于全局数据,找到偏移,直接得到。 对于局部数据,拦截代码,间接得到 。写外部工具 1、调用功能 windows系统提供了接口(CreateRemoteThread),允许一个软件调用另一个软件的功能。 2、获取数据
2020-06-27 11:06:59
644
原创 Windows逆向分析入门(三)——方法篇
前言 上一篇,聊到逆向分析是找偏移,有依据地找,效率会快。这一篇聊下找偏移方法。只说概念,具体的细节,后续会配合实战再展开细说。找偏移的方法1、内存 逆向的目的,是找功能或者数据在内存的地址。最直接的方法,就是在内存里面搜索。 对于数据:可以直接在内存搜索。 对于功能:如果知道代码的特征码,也可以直接在内存寻找。 (所谓代码的特征码,具体是一串字符串,在内存是唯一的,可以用来搜索定位)。2、界面 带界面的软件,一般流程就是: 1、软件生成界面,界面上会有按钮,编辑
2020-06-27 11:03:35
932
原创 Windows逆向分析入门(二)——原理篇
前言 正向开发,是先写代码,再编译成软件。而逆向分析,到手的只有软件。从软件入手,推测对应的代码,需要了解一下编译之后的软件是怎么跑起来的。软件运行过程 1、软件加载到内存。 2、CPU读取内存的指令。 3、根据指令,再读取数据,进行运算。 4、运算的过程,数据是存在CPU里面的寄存器。 5、运算过程,用到另一个功能,需要保存当前环境,存到堆栈。 (这里涉及操作系统和计算组成原理,大概了解,心里有底就好)代码语言的变化 1、C/C++语言:高级语言,给人看的 2、汇编
2020-06-27 10:58:16
1224
2
原创 Windows逆向分析入门(一)——总篇
前言 一开始小白,学了些教程。 大多教程说了找功能的具体过程,但没说为什么要这么找。导致自己找新的功能时,容易不知道怎么下手。 也没找到把逆向分析这事说明白的资料,只能自己搜集零碎的信息,慢慢形成对逆向分析的整体认知 。 学习过程,也加入一些逆向的圈子。接触下来,交流的氛围不太理想。小白能百度的不百度,只会伸手要;大佬能分享的不分享,大多是炫耀。结果就是每个人花很多时间找相同的功能。 接触逆向有段时间了,整理整理,把逆向这事理清楚,希望对后来者有所帮忙。会从原理说起,对逆向分析有个
2020-06-27 10:54:47
1761
1
原创 Dump微信PC端的界面Duilib文件
零、有啥用网上大多数的微信逆向思路,是CE搜索数据得到地址,OD下访问断点,然后在堆栈里面大海捞针的找Call,效率太低了。其实微信的界面是用Duilib做的,Duilib的界面布局写在XML文件。然后界面的消息处理,是通过控件名处理的。比如发送按钮,XML文件里面是"send_btn",代码里面是 if(xxx== “send_btn”)。利用这个特性,可以直接用字符串定位,省事很多。一、资料原版Duiib源码地址:https://github.com/duilib/duilib微信Duilib
2020-05-11 18:02:36
1810
原创 微信协议入门——原理篇
先上两张图,看下微信的架构各个模块的功能分别如下:Application协议:微信用的是google的protobufHandshake协议:安全地协商出对称加密密钥Alert协议:用于通知对端发生错误,希望对端关闭连接Record协议:使用对称加密密钥进行安全的通信理论上的流程就是:1、先使用mmtls的Handshake协议,协商出加密密钥2、业务数据经过protobuf序列化后,再用协商出的加密密钥进行加密传送更加具体的情况先给出:1、协商出加密密钥微信选择的握手协议1-R
2020-05-09 11:56:59
2866
1
原创 微信无痕清粉分析过程-附源码地址
一、环境1、微信版本2、WeChatWin.dll基址基址=0FD30000大小=018A2000 (25829376.)入口=10A0AA01 WeChatWi.名称=WeChatWi文件版本=2.8.0.121路径=C:\Program Files (x86)\Tencent\WeChat\WeChatWin.dll二、观察添加好友过程1、发起添加好友日志调试字串: ...
2020-04-01 12:28:09
2841
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人