用OD跟踪金山游侠的部分代码并用汇编还原其功能
这是偶无聊的时候跟踪金山游侠的部分代码,并用汇编根据其程序流程写出了完整的代码,就当练练手吧!
0041EC32 /. 55 push ebp ;后面要用EBP读堆栈找外部参数所以就要先保存EBP
0041EC33 |. 8BEC mov ebp, esp ;用EBP读堆栈,以为ESP在不断变化
0041EC35 |. 51 push ecx
0041EC36 |. 56 push esi
0041EC37 |. 57 push edi ;以上为保存3个寄存器的值
0041EC38 |. FF71 20 push dword ptr [ecx+20] ; /打开的进程ID,第三个参数
0041EC3B |. 6A 00 push 0 ; |句柄是否可以被继承,0为不继承,第二个参数
0041EC3D |. 6A 10 push 10 ; |打开进程权限,这里是读权限,第一个参数
0041EC3F |. FF15 78F34500 call dword ptr [<&KERNEL32.OpenProcess>] ; /打开进程函数,要使用就得先打开
0041EC45 |. 8BF0 mov esi, eax ; 把EAX中的返回句柄保存到ESI中
0041EC47 |. 85F6 test esi, esi ; 测试ESI,就是看函数是否执行成功
0041EC49 |. 74 35 je short 0041EC80 ; 不成功的话跳到子程序末尾
0041EC4B |. 8B7D 10 mov edi, dword ptr [ebp+10] ; 把外部第3个参数保存到EDI
0041EC4E |. 8D45 FC lea eax, dword ptr [ebp-4] ; PUSH ECX时在内存中的值
0041EC51 |. 50 push eax ; /返回实际读取数,第五个参数
0041EC52 |. 57 push edi ; |要读写的字节数[EBP+10]中的值,第四个参数
0041EC53 |. FF75 0C push dword ptr [ebp+C] ; |接收读取数值的缓冲区,第三个参数
0041EC56 |. 8365 FC 00 and dword ptr [ebp-4], 0 ; |把返回实际读取数缓冲区初始为0
0041EC5A |. FF75 08 push dword ptr [ebp+8] ; |起始地址,第二个参数
0041EC5D |. 56 push esi ; |句柄,第一个参数
0041EC5E |. FF15 74F34500 call dword ptr [<&KERNEL32.ReadProcessMemory>] ; /读进程内存
0041EC64 |. 85C0 test eax, eax ; 测试函数返回值
0041EC66 |. 74 11 je short 0041EC79 ; 不成功的话跳到子程序末尾
0041EC68 |. 397D FC cmp dword ptr [ebp-4], edi ; 比较设定读取长度和返回长度是否一样
0041EC6B |. 75 0C jnz short 0041EC79 ; 不一样的话跳到子程序末尾
0041EC6D |. 56 push esi ; /进程ID,第一个参数
0041EC6E |. FF15 A0F34500 call dword ptr [<&KERNEL32.CloseHandle>] ; /结束进程
0041EC74 |. 6A 01 push 1 ;把1压入堆栈
0041EC76 |. 58 pop eax ;把刚才的1弹到EAX
0041EC77 |. EB 09 jmp short 0041EC82 ;无条件跳
0041EC79 |> 56 push esi ; /进程ID,第一个参数
0041EC7A |. FF15 A0F34500 call dword ptr [<&KERNEL32.CloseHandle>] ; /结束进程
0041EC80 |> 33C0 xor eax, eax ;EAX清O
0041EC82 |> 5F pop edi
0041EC83 |. 5E pop esi ;把先前保存的EDI和ESI还原
0041EC84 |. C9 leave
0041EC85 /. C2 0C00 retn 0C ;返回并清理堆栈中12个字节
以下是用汇编写的代码,为了大家能看懂我没大量使用汇编指令,我使用高级语言的结构描述
_myReadProcessMemory proc uses edi esi lpBaseAddress,lpBuffer,dwSize ;
local @lpNumberOfByteRead ;局部变量,保存返回读取的实际字数
invoke OpenProcess,PROCESS_VM_READ,NULL, ;以读的方式打开进程,最后一个参数是进程句柄我没写,因为我不知道push dword ptr [ecx+20]是怎么得到进程句柄的,谁能告诉我?
mov esi, eax ;把EAX中的返回句柄保存到ESI中
.if esi == 1 ;判断函数是否执行成功
mov edi,dwSize ;把dwSize参数保存到EDI
lea eax,@lpNumberOfByteRead ;把@lpNumberOfByteRead地址装到EAX里
invoke ReadProcessMemory,esi,lpBaseAddress,lpBuffer,dwSize,eax ;读内存
.if eax == 1 ;判断函数是否执行成功
.if @lpNumberOfByteRead == edi ;比较设定读取长度和返回长度是否一样
invoke CloseHandle,esi ;结束进程
push 1 ;把1压入堆栈
pop eax ;把刚才的1弹到EAX做为返回值,因为程序返回时默认把返回值压到EAX中
jmp _end ;条到结尾
.endif
.endif
invoke CloseHandle,esi ;结束进程
.endif
xor eax,eax ;EAX清O,因为程序返回时默认把返回值压到EAX中,返回0说明没执行成功
_end:
ret ;返回
_myReadProcessMemory endp
BY:晓斌
QQ:6750333
用OD跟踪金山游侠的部分代码并用汇编还原其功能相关推荐
- 天龙八部网单服务器修改物品,如何用金山游侠V修改单机版天龙八部里面的物品啊?...
先用游侠搜索物品十进制代码,然后回到游戏将物品的位置调换,再使用游侠搜索代码,重复搜索直到出现一个或两个地址. 详细步骤(举例): 一.配件的修改: 先到桂州货铺去买一个铁手环,佩带上,再把从自己房间 ...
- OD调试9—实例:深入分析代码完成软件破解
OD调试9-实例:深入分析代码完成软件破解 爆破,是最初级的解决方案,不到万不得已,我们不直接修改JNZ通关.因为这样子的话,我们就享受不到破解.逆向的真正乐趣了. 了解程序背后按照剧情发展经常会出 ...
- ICCV2017跟踪算法BACF原理及代码解析
文章和代码下载地址: Galoogahi H K, Fagg A, Lucey S. Learning Background-Aware Correlation Filters for Visual ...
- 局域网对战平台 linux,在Linux下可用Wine安装和运行完美对战平台、金山游侠2002体验版...
在Linux操作系统下可用Wine安装和运行完美对战平台.金山游侠2002体验版.exe文件,它们是Windows下的软件,在Linux中借助Wine就可以使用完美对战平台和金山游侠2002体验版了, ...
- TPAMI2015跟踪算法KCF原理及代码解析
文章和代码下载地址: http://www.robots.ox.ac.uk/~joao/circulant/ 一.基础公式的由来 相关滤波跟踪器可以表示为最小化的岭回归问题: 表示期望相应,表示正则系 ...
- 金山开源安全卫士全套代码编译指南–湘勇整理版
金山开源安全卫士全套代码编译指南–湘勇整理版 要从金山开源安全卫士的代码里学习,首先当然是最好能把全套代码编译出来进行调试.在开发湘勇网络医生的过程中,我一直关注金山开源安全卫士代码的更新动态,第一时 ...
- VC++ 查看C++代码的汇编代码列表
VS2010 Express版本:非Express版本操作略有不同: 新建一个控制台工程: 工程属性:如下图位置:默认是没有汇编代码输出: 选中其中一个有汇编代码输出的选项: 然后构建一下:除了生成e ...
- python爬虫背景_利用Python代码实现一键抠背景功能
前言 又是一个逛csdn发现的一个有趣的小项目,可以一键抠背景,需要用到removebg模块及其API,API可从其官网免费获取,网址如下https://www.remove.bg/zh ps:加上/ ...
- 如何用HTML语言设计进度条,html5代码如何实现进度条功能?(示例)
本篇文章主要介绍html5代码如何实现进度条功能,希望对大家有所帮助. html5代码实现进度条功能具体代码示例如下:/*实现进度条的功能*/ 下载进度: /*js代码*/ var pg=docume ...
最新文章
- Linux学习整理(一)
- AI理论知识整理(2)-对称矩阵-特征值与特征向量
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构
- Mysql显示创建表的sql语句
- Phoenix 关联映射 Hbase表 获取不到数据,upsert hbase 列名为16进制字符
- JUnit4 中@AfterClass @BeforeClass @after @before的区别
- AI空谈情怀,也是要输的 | 人机辩论大战
- Mongodb高级查询【二】
- 数据库知识点总结归纳
- 概率论基础 - 5 - 马尔可夫不等式
- 56ip数字标牌软件
- 深度学习的图片统一设置大小
- Bugku之秋名山老司机
- 收藏一些非常不错的学习资源
- 艺赛旗(RPA)word 文本差异比较
- Vim中如何全选复制粘贴
- layui tree 对节点进行搜索
- 读入一个整数,如果是1~5之间则分别输出5个福娃的名字否则输出“北京欢迎你
- TabLayout 选择标题改变颜色及大小
- python 学习快速入门
热门文章
- domino文件拆离数据库,放入指定目录
- ps2021神经网络AI滤镜在哪,ps2021神经滤镜不能下载
- 迪拜能否在2020年成为第一个区块链动力城市?
- 机会总是留给有准备的人--韦东山【转】
- IBM 2022年关于安全的五大预测;美通社推出2022年巴塞罗那世界移动通信大会整合传播方案 | 全球TMT...
- 示波器基础系列之三:关于示波器的触发功能(上篇)(转载自360doc个人图书馆)
- 【HTML+CSS】简历表格
- Android 天气APP(三十二)快捷切换常用城市
- 建筑设计与施工VS软件设计与编程
- C# 如何遍历一个实体的所有字段并给另外一个实体赋值,包含子实体也可以