不知道是18年还是19年,当时搞web搞腻了,学了一个月二进制,pwn成功以后就搁下了。
当时的学习笔记,后续重新学习的时候再进一步完善
汇编语言:
段种类:.code、.data和堆栈(stack)
指令 | 英文全拼 | 翻译 |
---|---|---|
MOV | Move | 传送 |
PUSH | Push onto the stack | 进栈 |
POP | Pop from the stack | 出栈 |
XCHG | Exchange | 交换 |
堆栈操作是以“后进先出”的方式进行数据操作。堆栈帧,啥关系
mov eax,dword ptr fs:[0] 的意思是把从FS:[0]处开始的双字数据传送给EAX
汇编语言基础
P39页码在上方 | 第一个汇编语言程序 |
---|---|
main PROC | |
mov eax,5 | |
add eax,6 | |
INVOKE ExitProcess,0; | 程序结束 |
main ENDP |
P39 | 添加一个变量 |
---|---|
.data | 这个是数据区 |
sum DWORD 0 | 定义名为sum的变量。 DWORD是关键字,只限制大小写,不限制存放内容 |
.code | 代码区 |
main PROC | |
mov eax,5 | |
add eax,6 | |
mov sum,eax | |
INVOKE ExitProcess,0 | |
main ENDP | |
P46 | 整数加减法 |
---|---|
.386 | 指明指令集. |
.model flat,stdcall | 程序工作模式, flat为Windows程序使用内存的模式(代码和数据使用同一个4GB段), stdcall为子程序的调用规范(32位windows服务要求使用stdcall),API调用时右边的参数先入栈 |
.stack 4096 | |
ExitProcess PROTO, dwExitCode:DWORD | |
.code | |
main PROC | |
mov eax,5 | 汇编程序模板,再次增添代码即可 |
add eax,6 | |
INVOKE ExitProcess,0 | |
main ENDP |
内部数据类型
类型(这里应该大写的) | 用法 |
---|---|
byte | 8位无符号整数,B代表字节 |
sbyte | 8位有符号整数,S代表字节 |
word | 16位无符号整数 |
sword | 16位有符号整数, |
dword | 32位无符号整数,D代表双(字) |
sdword | 32位无符号整数,SD代表有符号双(字) |
fword | 48位整数(保护模式中的远指针) |
qword | 64位证书,Q代表四(字) |
tbyte | 80位(10字节)整数,T代表10字节 |
real4 | 32位(4字节)IEEE短实数 |
real8 | 64位(8字节)IEEE长实数 |
real10 | 80位(10字节)IEEE扩展实数 |
二进制基础知识
push 123。push 数字 ,意义在于赋值,以及移动eax寄存器。
堆栈
老洞,了解一下
玩二进制所需要的知识
工具,了解一下
PE文件结构(数据节)
需要区分好下面的节
文件偏移地址:
数据指的是什么,文件开头又指的是什么
文件开头,指0x000?
难怪用减
0day书
1、 栈工作原理
函数调用完后,通过retn指令返回。retu指令会把这个返回地址弹入EIP寄存器。之后跳转到这个地址去执行。如果可以改变retn指令的返回地址,EIP执行的指令将被改变
工具篇
OD(加载程序,还可以直接附加进程)
OD快捷键
OD界面
破解Traceme(程序载入点,push ebp。但为啥不是那个固定的值呢)
注意这个函数!!!
破解Traceme3(OD使用教程那里,还没看的,可以把进度条拉到那里去看)
OD操作
OD入口查找(3个压栈操作,GetCommandLineA)
IDA
IDA桌面技巧
主窗口
右键可切换(文本视图+图表视图+距离视图)
查找函数(Alt+T、F5查看函数内容)
Hexview(修改数据用)
Export(输出函数)
Import(输入函数)
Name
Function
String
Struts
Enum
ESP(以下截图为计算平均值bug实验)
对数据添加监视
运行程序
地址计算
单步跟踪
快捷键
断点 F2
运行 F9
单步 F8
啥是硬件断点
视频例子
循环了二十次,问题所在
硬断点:
其他反汇编工具
写exe,尝试crack
https://jingyan.baidu.com/article/48b37f8dd5c0b01a6464883d.html
visual c++ 6.0 迷你版下载地址:https://dl.pconline.com.cn/download/803716-1.html
#include “stdio.h” #include “string.h” #define PASSWORD “1234567” int verify_password(char *password){ int authenticated; authenticated=strcmp(password,PASSWORD); return authenticated; } main(){ int valid_flag=0; char password[1024]; while(1){ printf(“please input password: “); scanf(“%s”,password); valid_flag = verify_password(password); if(valid_flag){ printf(“incorrect password!\n\n”); } else{ printf(“Congratulation!\n”); break; } } } |
---|
写exe,尝试pwn(为何0123456不能绕过)
#include “stdio.h” #include “string.h” #define PASSWORD “1234567” int verify_password(char *password){ int authenticated; char buffer[8]; //add local buffer to be overflowed authenticated = strcmp(password,PASSWORD); strcpy(buffer,password);//over flowed here return authenticated; } void main(){ int valid_flag=0; char password[1024]; while(1){ printf(“please input password: “); scanf(“%s”,password); valid_flag = verify_password(password); if(valid_flag){ printf(“incorrect password!\n\n”); } else{ printf(“Congratulation!\n”); break; } } } //反汇编分代码块,数据块。堆栈是数据块的。函数调用时,虽然涉及堆栈。但是在进栈出栈操作时,才会对栈进行操作。 |
---|
尝试覆盖EIP溢出(filePwn)
#include “stdio.h” #include “string.h” #include “stdlib.h” #define PASSWORD “1234567” int verify_password(char password){ int authenticated; char buffer[8]; //add local buffer to be overflowed authenticated = strcmp(password,PASSWORD); strcpy(buffer,password);//over flowed here return authenticated; } void main(){ int valid_flag=0; char password[1024]; FILE fp; if(!(fp=fopen(“filePwn.txt”,”rw+”))) { exit(0); } fscanf(fp, “%s”,password); valid_flag = verify_password(password); if(valid_flag){ printf(“incorrect password!\n\n”); } else{ printf(“Congratulation!\n”); } fclose(fp); } //filePwn.txt //为什么要逆序输入呢? 字符串反转网站:http://www.5ixuexiwang.com/str/reverse.php 倒序之前:00401420 倒序之后:02410400(错) 倒序之后,应该是:20144000 |
---|
代码分析技术
静态分析技术
挖0day可以用这些静态代码扫描技术
动态分析技术
Ollydbg小刀試牛(脱壳、看视频时间)
F7(单步步入)、f8(单步,相比f7应该更宏观,不进入函数。Php有没这种调试方法呢)、F4(下一行,直接运行到某位置)push ebp
脱壳,就是先把外面的那层壳,运行完。等到地址连续的时候,就可能是壳已经脱完了
他说源码,工具,资料。都会给官方
Fuzzing(fuo tion)
c/s
专用工具
Fuzzing DIY
FTP服务,有多少种应用程序
病毒分析
病毒分析工具
病毒分析知识
核心态和用户态
什么是代码节,为什么PE病毒只有代码节,就不能引入函数节
Hook是啥