gdb调试基础
gdb调试基础
调试: s默认在源代码下进行调试,在已经输入s的情况下,直接回车执行上一条语句; si为在汇编下进行调试;
下断点:
1. `b func_name`
2. `b /src/codefile.cc:81` gdb将在运行到源码文件/src/codefile.cc的第81行中断
3. `b *0x5859c0` "*"号是必须加在地址前的,0x5859c0为函数指针的地址
段列表: vmap可以显示程序的段列表
Linux基础
Linux基础一、Linux文件系统根目录下的目录及他们的作用一切皆文件
根目录下存多个文件夹(名称系统定义,不能修改):
/bin[常用] (/usr/bin 、/user/local/bin)
为Binary缩写,存放着最常使用的命令
/sbin (/usr/sbin、/user/local/sbin)
s即SuperUser,存放管理员的系统管理程序
/home[常用]
用于存放不同用户创建的文件,结构为/home/用户名/……
/root[常用]
系统管理员,超级权限者的主目录
/lib
系统开机需要最基本的动态链接库,同时存放程序需要的动态链接库
/lost+found (隐藏目录)
存放非法关机后生成的文件
/etc [常用]
系统管理需要的配置文件和子目录,例如mysql的my.conf
/usr [常用]
非常重要,放置用户的很多应用程序和文件,类似programfiles
/boot [常用]
系统启动的核心文件,一些连接文件和镜像文件
/proc [不能动]
是一个虚拟的目录,是系统内存的映射,访问这个目录获得系统信息
/srv [ ...
vi和vim的基础使用
vi的基础使用vim即vi的增强版,带有代码补全高亮等功能。
一、vi和vim的三种模式
正常模式:移动光标,删除字符或者整行,复制粘贴
插入模式(一般输入i进入):编辑模式
命令行模式:(输入esc,然后:)提供相关指令,存档、离开等等
三种模式的相互转化:
命令行中输入:vim xxx进入 一般模式;
在 一般模式中,输入i或者a进入 编辑模式;输入:或者/进入 命令模式
在 命令模式或者 一般模式中,输入esc进入 一般模式
命令行模式的退出方式:
:wq-保存并退出
:q-退出,不保存
:q!-强制退出,不保存
二、vi快捷键总结1.一般模式下的处理拷贝:拷贝当前行为yy;拷贝从当前行开始,直到向下的n行nyy(如5yy)
粘贴:输入p
删除:删除当前行为dd;删除从当前行开始,直到向下的n行ndd(如5dd)
撤销:输入u撤销
定位到首、末行:输入G(即shift+g)移动到最末行,输入gg移动到首行
定位到某一行:输入要定位的行号(如 20),然后输入G(即shift+g)
2.命令行模式的处理查找:输/进入命令行模式,输入要查找的字符串,回车即可,下一个为n
设置行号: ...
正则表达式简单笔记
正则表达式python中可以通过import re引入re模块,用正则表达式处理字符串
一、正则表达式在线正则表达式测试工具:https://regex101.com/
1、限定符匹配单字符? 限定符:通过used?可匹配use或used,等含有use字样,d可有可无;
*限定符:通过ab*c可以匹配 ac abc abbbbc等含有n个b,ac必须按照顺序有的字符串;
+限定符:即*限定符除去没有b的情况,ab不会被匹配;
{n}限定符:ab{6}c可匹配b出现次数为6的情况,或者,{2,6}为2-6次,{2,}为两次以上
匹配多字符使用 **()**框选所要匹配的字符,然后正常使用限定符。
2、“或”运算符正则表达式要匹配 acat或者 adog时,可以使用或运算符,表达式如下:
a(cat|dog)
3、字符类[] 匹配符:
如果想匹配ab三个字母组成的内容,可以使用 [abc]+;
其中[]用于限制匹配的字符;
在方括号中,我们可以指定范围,语法如 [a-zA-Z]即大小写所有英文字符;
^匹配:
和方括号联用,[^0-9]+代表非数字
4、元字符元字符是正 ...
攻防世界Reverse进阶区-BABYHOOK-writeup
攻防世界Reverse进阶区-流浪者-writeup本题为较为基础的Hook题,通过本writeup来整理一下思路。
main函数
进入程序,首先确定flag字符串长度为19;
然后发现程序会将输入内容写入文件名为文件Your_input的文件;
最后通过核验NumberOfBytesWritten变量是否为1来控制输出;
此时,若进入sub_401240函数就会中计,需手动进行测试。
手动测试后发现输出文件中的内容和输入完全不同,推测可能在sub_401220函数中对输入进行了加密。
sub_401220函数:进入sub_401220函数:(为hook关键函数)
其主要内容如下(1~14行):
获取当前进程号,打开进程到hprocess,libfilename为一常量kernel32.dll,procname为一常量writefile,故dword_409c4(*WriteFile_0位置)、lpaddress所存为writefile的地址,然后程序复制了lpaddress的地址到unk_40c9b4。
然后开始hook操作(15、16行):
可以看到第15行有一常量被存入地 ...
汇编跳转指令及其十六进制码
汇编跳转指令及其十六进制码几种跳转指令和对应的机器码:0xE8 CALL后面的四个字节是地址0xE9 JMP后面的四个字节是偏移0xEB JMP后面的二个字节是偏移0xFF15 CALL后面的四个字节是存放地址的地址0xFF25 JMP后面的四个字节是存放地址的地址0x68 PUSH后面的四个字节入栈0x6AP USH后面的一个字节入栈
————————————————版权声明:本文为CSDN博主「hincon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/ccworm/article/details/112787439
攻防世界Reverse进阶区-BABYRE-writeup
攻防世界Reverse进阶区-BABYRE-writeup以此篇WP记录第一次使用ida解决smc(自解密)
观察反汇编代码:
第12行调用的函数在第8行被加密了
因此,需要手动解密观察,双击judge进入:
然后使用idapython脚本解决,右上角file、script command
如图编写代码:
点击run,可以看到内容被改变:
选中judge函数一行,c(code),将其变成代码,这时的judge被分为三个函数,我们将其合三为1,框选地址B00~BB5(所有红色区域),p(重新生成function)
此时可以在左侧找到相应函数内容,F5即可
然后针对反汇编后的加密算法写一个脚本:
12345678v2=['f','m','c','d',127,'k','7','d',';','V','`',';','n','p' ...
攻防世界Reverse进阶区-流浪者-writeup
攻防世界Reverse进阶区-流浪者-writeup
关键函数1:sub_401890
调用了另一个函数
关键函数2:sub_4017F0
先传入关键函数1进行加密,加密后进入函数2进行进一步加密,最后与kanXue...字符串对比查验
逆向脚本书写逻辑即可
最终运行结果:
python数据类型以及常用函数(基础)
python笔记Python3 中有六个标准的数据类型:
Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
Python数据类型转换有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可,在下一章节 Python3 数据类型转换 会具体介绍。
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
函数
描述
[int(x ,base])
将x转换为一个整数
float(x)
将x转换到一个浮点数
[complex(real ,imag])
创建一个复数
str(x)
将对象 x 转换为字符串
repr(x)
将对象 x 转换为表达式字符串
eval(str)
用来计算在字符串中的有效P ...
关于编码方式的总结
各类编码总结一、ascii、UTF-8、gbk1、ascii码ASCII 码一共规定了128个字符的编码:
2、UTF-8、UTF-16、UTF-32utf(Unicode Transformation Format)
UTF-8: utf-8是unicode的实现方法。其编码规则如下:
1)对于单字节的符号:字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的;
2)对于n字节的符号(n > 1):第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
举例说明:
选择汉字“鲁”,在unicode官网查询其编码为U+9C81
转换为二级制数字即为:1001 1100 1000 0001,大小两字节。
根据上表,“鲁”字在第三个范围内,其表示即为1110xxxx 10xxxxxx 10xxxxxx,故将前文中的二进制数字填入,即为:11101001 10110010 10000001,再转换为十六 ...