Chen Kaiming Copyright 2007

Slides:



Advertisements
Similar presentations
面向侧面的程序设计 方林博士 本文下载地址:
Advertisements

阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
四資二甲 第三週作業 物件導向程式設計.
C语言实验 第一课 标题:学号+姓名.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
第九章 字符串.
破解和混合编程实例 Hacker Reverse Engineering
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
Hadoop I/O By ShiChaojie.
第4讲 Windows编程基础 此为封面页,需列出课程编码、课程名称和课程开发室名称。
第六章 运行时存储空间的组织和管理 术语 本章内容 讨论一个活动记录中的数据布局 程序执行过程中,所有活动记录的组织方式 过程的活动
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
第1章 Windows应用程序框架的 创建与消息处理
基本的”防”黑客技术 Basic” ” Hacker Technique
走进编程 程序的顺序结构(二).
辅导课程六.
网络游戏开发语言基础 ——Windows程序设计
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第一讲: 基本流程(1).
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
以ISI平台为例,为您演示一下如何在Endnote文献中查看该文献的References
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
逆向工程-汇编语言
如何生成设备节点 广州创龙电子科技有限公司
Windows 7 的系统设置.
VSS使用简介 王树升
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
WinRAR(64)反汇编 Presented by: 郭炜栋 陈赛特.
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章 登录UNIX操作系统.
新PQDT论文全文库提交平台.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
本节内容 消息的分发 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第4章 Excel电子表格制作软件 4.4 函数(一).
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
iSIGHT 基本培训 使用 Excel的栅栏问题
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
College of Computer Science & Technology
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
本节内容 消息的接收 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
四川省中小学教师信息技术应用能力提升工程
_01自己实现简单的消息处理框架模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
YOUR SUBTITLE GOES HERE
鏈球的力學分析 日本奧運鏈球冠軍(82米91) 室伏廣治因小腿肌肉受傷,退出杜哈亞運。 俄羅斯「鐵娘子」泰亞娜.李森科 九十五年八月八日在
大数据搜索挖掘实验室 第五章 子程序设计 张华平 副教授 博士 Website: 大数据搜索挖掘实验室
WEB程序设计技术 数据库操作.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
顺序结构程序设计 ——关于“字符串”和数值.
培训课件 AB 变频器的接线、操作及参数的备份 设备动力科.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
黑客反向工程导论 中国科技大学计算机系
Presentation transcript:

Chen Kaiming Copyright 2007 汇编插入语句 ■汇编语言编程很困难. 求两个数的和比较容易,但对于输入输出等非常困难. ■要了解处理器结构和操作系统,很复杂 ■ 汇编插入语句可以在熟悉的环境里进行. 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 方法1: 直接在内存中搜索用户输入的密码 ■由于各种复杂的原因, 密码不可能会放在很容易找到的地方, 同时程序中也有非常多的字符串都很像密码串。 ■想法: 搜索原始密码很难,搜索用户输入的密码应该简单。 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 方法1: 直接在内存中搜索用户输入的密码 ■工作过程:  idag 运行 程序。 输入“ KPNC Kaspersky” 转idag 调试方式, 搜索KPNC Kaspersky 字符串。可找出多个位置,分析选择可能性最大的一个。 在相应位置处004295E0中设置断点 然后重新启动idag 运行。 断点设置在检测调用语句之后的指令上。 退出匹配的进程/修正JMP指令以及…… 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 输入密码的程序 for( ; ; ) { printf("Enter password: "); fgets(&buff[0] , PASSWORD_SIZE, stdin); if (strcmp( &buff[0] , PASSWORD)) // "申斥"密码不匹配 printf("Wrong password\n"); else break; if (++count>3) return -1; } 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 输入密码程序的分析 ■分析: 用户提供的密码被放在 buff 缓冲区 并与参照密码比较,如果不匹配, 那么需要从用户那里再次请求提供密码. ■第二次输入前不清除 buff. 依次类推, 到达接受Wrong password 执行分支, 使用调试器, 进行搜索, 就会找到. 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 实验和验证 执行 list1_p7.exe 输入密码: chenkaiming 00425A30 _iob dd offset _bufin 00425A30 "chenkaiming\n\n" 00425A38 dd offset _bufin "chenkaiming\n\n" ( 00425A38 不合题意, 舍去) 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 ■搜索立即数 0x00425A30 得两处: 00401042 push offset _iob 00401047 push 64h //最大密码长度 00401049 lea eax, [ebp+var_68] // 密码缓冲区指针 0040104C push eax 0040104D call fgets 00401052 add esp, 0Ch //弹出三个参数 00401055 push "myGOODpassword\n" 0040105A lea ecx, [ebp+var_68] 0040105D push ecx 0040105E call strcmp 00401063 add esp, 8 00401066 test eax, eax 00401068 jz short loc_401079 0040106A push offset@ ; "Wrong password\n" 0040106F call printf 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 方法2 在密码输入函数上设置断点 void CCrackme_01Dlg::OnOk() { char buff[PASSWORD_SIZE]; CEdit m_password; m_password.GetWindowTextA(&buff[0], PASSWORD_SIZE); if (strcmp(&buff[0], PASSWORD)) printf("Wrong Password"); m_password.SetSel(0,-1,0); return; } else { printf("Password OK"); } CDialog::OnOK(); } 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 方法2 在密码输入函数上设置断点 void CCrackme_01Dlg::OnOk() { char buff[PASSWORD_SIZE]; CEdit m_password; m_password.GetWindowTextA(&buff[0], PASSWORD_SIZE); if (strcmp(&buff[0], PASSWORD)) printf("Wrong Password"); m_password.SetSel(0,-1,0); return; } else { printf("Password OK"); } CDialog::OnOK(); } 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 方法2 在密码输入函数上设置断点解释 ■使用 ida 运行 上面程序并输入 kpnc++后跟踪程序(反汇编器能识别系统函数) GetWindowText text:77E1A4E2 push ebp text:77E1A4E3 mov ebp, esp text:77E1A4E5 push ff text:77E1A4E7 push 77E1A570 text:77E1A4EC ………… ■注意GetWindowText 的参数压栈顺序, 显示 ebp+8 内容: 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 0023:0012F9FC ………………………………………. 0023:0012FA0C ………………………………………. 0023:0012FA1C ………………………………………. GetWindowText ( HWND hwnd; /*文本窗口或者控件句柄*/ LPTSTR lpString; /*文本缓冲区地址 */ int nMaxCount; /*欲拷贝的最大字符数 */ ); 解释 ebp+8 的意义. 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 子程序 mov ebp,esp 自由空间 返回地址 hWnd lpString nMaxCount 父函数堆栈 ebp 栈顶指针 ebp+4 ebp+8 字符串缓冲区 ebp+0c ebp+10 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 ■推出函数接受输入的函数: (ebp+8) = 0012F9FC 0023:0012F9FC kpnc++ ……………………………………………. ■在此处设置断点, 再从头执行, 就可以到你要去的程序代码段. 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 方法3 针对消息设置代码段 ■利用消息获取编辑窗口文本. ■代替 GetWindowText() 的 SendMessageA(hWnd, WM_GETTEXT,(LPARAM)&buff[0]) 将使 GetWindowTextA(GetDlgItemTextA)函数处的断点失效。 ■在 WM_GETTEXT消息处设置断点 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 方法3 针对消息设置代码段 ■利用消息断点   在处理字串方面可以利用消息断点WM_GETTEXT和WM_COMMAND。前者用来读取某个控件中的文本,比如拷贝编辑窗口中的序列号到程序提供的一个缓冲区里;后者则是用来通知某个控件的父窗口的,比如当输入序列号之后点击OK按钮,则该按钮的父窗口将收到一个WM_COMMAND消息,以表明该按钮被点击。 ■  BP xxxx WM_GETTEXT (拦截序列号) ■  BP xxxx WM_COMMAND (拦截OK按钮)    2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 消息原型 Handle Class WinPorc TID Dialog 6c291b81 2Dc Button 6c291b81 2Dc Edit 6c291b81 2Dc Static 6c291b81 2Dc LRESULT CALLBACK WindowProc ( HWND hwnd; // 窗口句柄 UNIT uMsg; // 消息标识符 WPARAM wParam; // 第一个消息参数 LPARAM lParam // 字符串长度 ); 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 消息原型 ■ HWND hWnd : 事件引起消息发生的那个窗口。 UINT message: 消息的ID,它是32位值,指明了消息类型。WPARAM wParam : 32位值,包含附加信息,决定于消息的种类。例如键盘的哪个键代码。LPARAM lParam: 32位值,同上。例如,前16位=重复数,              接着8位:扫描码(决定于厂家)                      第24位:为1时表示扩展键。                      第25到28位:保留区                      第29位为1时=alt按下,否则为0。                      第30位为1时=消息前按下,否则为0。                      第31位为1时=正在被释放,否则为0。 ■当用户按下一个键时。那是什么键,由这最后两个变量来说明。 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 设置断点 在调试器中设置: bpx 6c291b81 if (ebp->8) == WM_GETTEXT 退出调试器,运行输入密码比如“Hello”回车,则出现: Break due to BPX #0008:6C291B81 if( (esp8)==0xD) 因wparam为最大字符数,所以密码存放在 lparam中。 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 自由空间 返回地址 hWnd uMsg wParam lparam ebp 栈顶指针 ebp+4 ebp+8 ebp+0c 字符串缓冲区 ebp+10 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 运行结果 :d: *(esp+10) 0023:0012EB28 48 65 6c 6c 6f 00 f5…… hello…… 0023:0012EB28 1C ED 12 00 01 00 52…… 0023:0012EB28 70 2D 12 00 01 00 05…… 0023:0012EB28 24 15 CC CC 61 00 05…… :p ret :bpm 23:12EB28 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 实际破解范例 破解 Winrar 某一个试用版本: 令人恼火的试用40天. 学习 API 窥测器的使用方法. 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 抑制干扰屏的出现 每种对话框都是用某个API函数来显示的. 俘获显示干扰屏的 API 函数, 就有可能反汇编调用该函数的保护代码. CreateDialog , DialogBox, MessageBox 等都是与对话框相关的. 应该是那一个? 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 API窥测器程序 Kerberos 是一种常用的窥测器过滤器. 配置过滤器 ke_spy.txt文件. 去除 TisGetValue, DefWindowProcA, DispatchMessageA, GetFocus, GetMessageA, SendMessageA, SendMessageW, TranslateAcceleratorA, TranslateAcceleratorW, TranslateMessage等. 在函数前面加”;”. 注释掉一个函数. 提升过滤性能, 单击Options选项, 设置 Report only .exe calls 复选框, 使得程序仅报告从Winrar.exe发出的API调用, 而不收集从Dlls 中收集的调用. 单击 Browse按钮, 指定Winrar.exe文件,点击inject按钮,等待干扰屏的出现后退出Winrar, 查看Winrar.rep文件. 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 考察Winrar.rep文件 从文件结尾处入手, 找到显示”REMINDER”对话框,它是创建干扰屏的函数 . 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 代码分析 D440F46: cmp eax, 28h D440F49: jg short loc_440F4F 如果 eax > 28h (40, 试用期的天数) 就执行 0440F6E 处的 DialogBoxParamA 函数 显示 干扰屏. 结论: dword_004B43CB 保存程序安装以来所经历的天数. 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 代码修改 修改1:用 XOR eax, eax ; NOP 替换 cmp eax, 28h 运行结果: 不管eax 为何值, eax寄存器的值总是 0. 修改工具: 启动hiew, 装入 winrar.exe 转到 cmp 的 地址: .440F46 ---表示地址,而不是偏移量 用 33 C0 90 替换 83 F8 28 保存修改, 再运行 winrar.exe 修改2: 用mov eax, 6(B8,06,00,00,00) 代替 mov eax, dword_004B43C8(A1, C8,43,4B,00) 修改3: jmp short loc_440F73(EB,28) 代替jg short loc_440F4F(7F 04) 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 强行注册分析 注册通过 一个含有数字签名的密钥文件来实现. 不一定非要密钥 才能注册, 只要成功设置注册标志即可. byte_495A60 : 提示对话框出现时给1值. 是控制对话框是否已显示的 信号开关. Dword_4B3A90: 见下图, 有很多应用但基本上都是加1,减1 Byte_4B7E00: 3个交叉引用, 2个位于 DoDragDrop附近 Byte_49F9BC: 读写操作很多. 所有写入值要么经过sub_40DB5C返回, 要么经过sub_44A278返回. 还有: mov byte_49F9BC, 0 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 深入分析sub_44A278 函数 可以看到程序中有多处出现了rarkey 字符串. 应该可以猜测到该函数是 注册 函数. 将该函数命名为 DoRegister 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 深入分析sub_40DB5C 函数 从DoRegister 函数的前面几行代码可以看到: 若sub_40DB5C 函数返回零值, DoRegister 继续注册. 若sub_40DB5C 函数返回非零值, 那么DoRegister立即从DoRegister 函数退出. 结论: sub_40DB5C 函数返回的是注册状态. 因此可以改名为 IsRegistered. 修改 IsRegistered 总是返回 非 零值. 在该函数末尾: XOR eax, eax, INC eax, retn 4. 启动winrar.exe 评估版消失! 但Registered to 有! 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 彻底破解About 对话框 根据Registered to寻找在程序中出现的位置(50DB4Ah). 启动 kerberos API窥测器, 加载 winrar.exe, 打开”About WinRAR” 对话框, 然后关闭winrar.exe , 查看kerberos 日志文件, winrar.rep , 在文件末尾有 DialogBoxParamA(400000, 496005:”ABOUTRARDLG”, 001200AA, 00444618, 00000000) 3. sub_444618 是一个窗口过程, 负责显示对话框. 其中含有很多SetDlgItem TextA 调用, 怎样 深入分析 ? 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 彻底破解About 对话框 4. 启动Microsoft-VS资源编辑器, 选择open file命令, 在文件类型字段指定所有文件”All files”; open as 字段 选择”Resources” 选项. 在资源树结构中,选择”Dialogs” 分支, 找到”ABOUTRARDLG”, 双击启动资源编辑器, 找到”40 days trail copy” 字符串, 若已注册,则被换成”Registered to” 字符串. 标识为 102(0x66) 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 彻底破解About 对话框 1. sub_4113DC 经过被仔细分析的结论是从密钥文件里取注册的用户名. 打开winrar.exe文件, 按F6 键打开对象表, .data段后面紧跟.tls 段, 将光标移动到.data 里没有内容的空闲区域, 比如49D7B0h, 按F3键切换到编辑修改模式, 写入字符串 Registered version hacked by student. 保存后下一步 将光标移动到004447E6处, 用 mov eax, 49D7B0h 替换 call sub_4113DC 后 保存推出. 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007

Chen Kaiming Copyright 2007 2019/2/22 Chen Kaiming Copyright 2007