逆 向入 门
来源:互联网 发布:list转换成byte数组 编辑:程序博客网 时间:2024/05/18 19:21
网上学习逆向很多资源,但是也有些不好,浪费时间或者说效率太低,一般说来,主要是去看雪和吾爱破解。实验吧也不错,其他在线实验平台基本不是好的选择,一是讲师讲的太枯燥,而且虚拟机太卡。
程序一般会加壳,壳的作用是保护程序,防止破解等,壳的常见实现是加密壳或者是压缩壳。
使用逆向工具link中的peid和exeinfope可以查看32位程序是否用了壳,以及该壳的类型。手动脱壳有esp定律,适用于压缩壳和部分加密壳不适用于完全加密壳。
upx压缩壳利用脱壳机可以轻松脱掉,esp定律也是必须掌握的
ecs eip 指令寄存器
eds默认段寄存器 和他搭配的常用寄存器ebx,edi,esi.edi和esi常常用来拷贝一段数据,他们不能分为更小的寄存器。
ess栈寄存器esp栈指针寄存器ebp和esp的区别是ebp会先入栈,然后ebp=esp,这样可以保证ebp永远能得到原本的值。
pushad是常见的壳入口,他将所有寄存器入栈入栈顺序是eax,ecx,edx,ebx,esp,ebp,esi,edi
以下是常见的各编译器的函数入口特征
Microsoft Visual C++ 6.0
00496EB8 >/$ 55 PUSH EBP ; (初始 cpu 选择)
00496EB9 |. 8BEC MOV EBP,ESP
00496EBB |. 6A FF PUSH -1
00496EBD |. 68 40375600 PUSH Screensh.00563740
00496EC2 |. 68 8CC74900 PUSH Screensh.0049C78C ; SE 处理程序安装
00496EC7 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00496ECD |. 50 PUSH EAX
00496ECE |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00496ED5 |. 83EC 58 SUB ESP,58
---------------------------------------------------------------------------------------
Microsoft Visual Basic 5.0 / 6.0
00401166 - FF25 6C104000 JMP DWORD PTR DS:[<&MSVBVM60.#100>] ; MSVBVM60.ThunRTMain
0040116C > 68 147C4000 PUSH PACKME.00407C14
00401171 E8 F0FFFFFF CALL <JMP.&MSVBVM60.#100>
00401176 0000 ADD BYTE PTR DS:[EAX],AL
00401178 0000 ADD BYTE PTR DS:[EAX],AL
0040117A 0000 ADD BYTE PTR DS:[EAX],AL
0040117C 3000 XOR BYTE PTR DS:[EAX],AL
或省略第一行的JMP
00401FBC > 68 D0D44000 push dumped_.0040D4D0
00401FC1 E8 EEFFFFFF call <jmp.&msvbvm60.ThunRTMain>
00401FC6 0000 add byte ptr ds:[eax],al
00401FC8 0000 add byte ptr ds:[eax],al
00401FCA 0000 add byte ptr ds:[eax],al
00401FCC 3000 xor byte ptr ds:[eax],al
00401FCE 0000 add byte ptr ds:[eax],al
----------------------------------------------------------------------
BC++
0040163C > $ /EB 10 JMP SHORT BCLOCK.0040164E
0040163E |66 DB 66 ; CHAR 'f'
0040163F |62 DB 62 ; CHAR 'b'
00401640 |3A DB 3A ; CHAR ':'
00401641 |43 DB 43 ; CHAR 'C'
00401642 |2B DB 2B ; CHAR '+'
00401643 |2B DB 2B ; CHAR '+'
00401644 |48 DB 48 ; CHAR 'H'
00401645 |4F DB 4F ; CHAR 'O'
00401646 |4F DB 4F ; CHAR 'O'
00401647 |4B DB 4B ; CHAR 'K'
00401648 |90 NOP
00401649 |E9 DB E9
0040164A . |98E04E00 DD OFFSET BCLOCK.___CPPdebugHook
0040164E > \A1 8BE04E00 MOV EAX,DWORD PTR DS:[4EE08B]
00401653 . C1E0 02 SHL EAX,2
00401656 . A3 8FE04E00 MOV DWORD PTR DS:[4EE08F],EAX
0040165B . 52 PUSH EDX
0040165C . 6A 00 PUSH 0 ; /pModule = NULL
0040165E . E8 DFBC0E00 CALL <JMP.&KERNEL32.GetModuleHandleA> ; \GetModuleHandleA
00401663 . 8BD0 MOV EDX,EAX
-----------------------------------------------------------------------------------------------
Borland Delphi 6.0 - 7.0
00509CB0 > $ 55 PUSH EBP
00509CB1 . 8BEC MOV EBP,ESP
00509CB3 . 83C4 EC ADD ESP,-14
00509CB6 . 53 PUSH EBX
00509CB7 . 56 PUSH ESI
00509CB8 . 57 PUSH EDI
00509CB9 . 33C0 XOR EAX,EAX
00509CBB . 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
00509CBE . B8 20975000 MOV EAX,unpack.00509720
00509CC3 . E8 84CCEFFF CALL unpack.0040694C
-----------------------------------------------------------------------------------------------
易语言入口
00401000 > E8 06000000 call dump_.0040100B
00401005 50 push eax
00401006 E8 BB010000 call <jmp.&KERNEL32.ExitProcess>
0040100B 55 push ebp
0040100C 8BEC mov ebp,esp
0040100E 81C4 F0FEFFFF add esp,-110
00401014 E9 83000000 jmp dump_.0040109C
00401019 6B72 6E 6C imul esi,dword ptr ds:[edx+6E],6C
0040101D 6E outs dx,byte ptr es:[edi]
也可能是这样的入口
Microsoft Visual C++ 6.0 [Overlay] E语言
00403831 >/$ 55 PUSH EBP
00403832 |. 8BEC MOV EBP,ESP
00403834 |. 6A FF PUSH -1
00403836 |. 68 F0624000 PUSH Nisy521.004062F0
0040383B |. 68 A44C4000 PUSH Nisy521.00404CA4 ; SE 处理程序安装
00403840 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00403846 |. 50 PUSH EAX
00403847 |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
-------------------------------------------------------------------
MASM32 / TASM32入口
00401258 >/$ 6A 00 push 0 ; /pModule = NULL
0040125A |. E8 47000000 call <jmp.&kernel32.GetModuleHandleA> ; \GetModuleHandleA
0040125F |. A3 00304000 mov dword ptr ds:[403000],eax
00401264 |. 6A 00 push 0 ; /lParam = NULL
00401266 |. 68 DF104000 push dump.004010DF ; |DlgProc = dump.004010DF
0040126B |. 6A 00 push 0 ; |hOwner = NULL
0040126D |. 6A 65 push 65 ; |pTemplate = 65
0040126F |. FF35 00304000 push dword ptr ds:[403000] ; |hInst = NULL
00401275 |. E8 56000000 call <jmp.&user32.DialogBoxParamA> ; \DialogBoxParamA-
阅读全文
0 0
- 逆 向入 门
- 新手入驻,向大家问个好!
- 向RDLC报表内传入一个字符值
- 有向图中各点的出度和入度
- 向循环有序链表内插入一个节点
- 第13周 向有序数组内插入元素
- matlab里面向信号里加入白噪声
- 浮点数向偶数舍入的问题
- 阿里云ECS向docker容器内传入文件
- 有向图与无向图的邻接矩阵,邻接表 计算出度与入度
- C# 四舍五入、进一法、舍位(取整,舍去小数,向负无穷舍入)函数
- C# 向一个DataTable内插入另一个DataTable的行,error“该行已属于另一个表”
- linux向hgfs目录拷入文件时没有权限的解决方法
- 关于向安卓模拟机SD卡上传入文件方法
- 用邻接矩阵存储有向图 输出各点的出度和入度
- 用邻接矩阵存储有向图,并输出各顶点的出入和入度。
- 用邻接表存储有向图,并输出各顶点的出入和入度
- HDU3926 - Hand in Hand(判断入度最大为2的无向图的同构)
- (二)u-boot启动流程分析(汇编部分)
- MQ消息序列化失败排查
- poj2528线段树+数据离散化
- Linux安装Mysql
- OpenCV 下载驿站(百度云盘下载,同步更新)
- 逆 向入 门
- 【Scikit-Learn 中文文档】多类和多标签算法
- Android日志工具Log
- python: TODO 助记符
- 树莓派-wiringPi-时间函数
- 判断一个年份是否为闰年
- 【Scikit-Learn 中文文档】特征选择
- Exception和File/day_17
- 【C#】ConfigurationSettings.AppSettings 已过时