- 博客(17)
- 收藏
- 关注
原创 [NSSRound#2 Able]findxenny
把解密出来的hex放ida之后,按c键反汇编出汇编指令,再按p创建函数,然后就能f5进去看伪代码了,不复杂只是三串字符串的比较,把字符串拿出来就是flag。这是加密指令的函数,不复杂,但是程序运行的时候才能把上面一大串字符加载出来所以不运行程序想解密只能手动(真麻烦)## smc就是先找一大串无意义的字符,然后一般就能找到加密了,自解密或者手动解密就能看到正确的汇编。Smc自解密,但在我的电脑上运行不了,所以不能动调。只能找到加密函数手动解密。
2023-04-13 16:46:06 437
原创 [BJDCTF 2020]Easy
发现main函数上面有一个ques函数,不就是question么;似乎是在打印什么东西,我们可以手搓代码也可以直接控制eip。IDA直接打开,发现什么东西都没有。运行之后看样子是要我们找到什么东西。
2023-04-13 16:43:34 230
原创 [HUBUCTF 2022 新生赛]ezPython
bytes_to_long():将字符串变为一串数。逆:long_to_bytes()(将一串数字变为字符串)原理:长度为n的字节串,从最低位向最高位每挪动一位,乘数倍增2^8,因为一个字节是8位bits。
2023-04-13 16:42:27 1431 1
原创 [NSSRound#3 Team]jump_by_jump_revenge
有可能加一个96仍超出范围,因此用了一个循环,一个一个加也行。加密过程有一个求模运算,解密时如果超出范围要加回去。更好理解,其实就是超出ASCII编码范围就加回去。
2023-04-13 16:41:07 624
原创 [SWPUCTF 2021 新生赛]re2
a和{根据原加密都得到y,脚本逆运算只能计算第二种,合理猜测正确的flag为{nss_caesar}该题符合伪代码逻辑的字符串有多个,需要一定的猜测。ps:要学会勇敢的试错和猜测,自信能解出来。
2023-04-13 16:39:47 370
原创 [SWPUCTF 2021 新生赛]简简单单的解密
RC4 算法非常简单:用从1~256个字节的可变长度密钥初始化一个256字节的状态矢量S,S的元素记为S[0],s[1],…对于加密和解密中应用的密钥流的产生,密钥流中的每个密钥k是由S中255 个元素按一定的方式选出一个元素而生成 每生成一个密钥k,S中的元素就被重新置。虽然每一次的s盒都不一样,但是rc4为对称加密,加解密过程可逆,因此解密直接按原程序跑就可以(因为由流程可以看出只有最后一步异或操作是对字符串的加密,前面的操作均为对s盒的更改运算,而且最后一步异或也可逆)题目过程为rc4加密。
2023-04-13 16:37:20 501
原创 Try2Bebug_Plus
更改edi的值,往下运行。这是一个自行计算falg的程序,解密函数运行完成之后点击进去查看得falg。看汇编代码可以看到,2710这个值被存入edi寄存器中,也就是说程序的暂停时间和edi的值有关。
2023-04-13 16:36:30 105
原创 坤坤的csgo邀请
这里0是字符串中止的意思,不是字符串,把他们全部拼起来,像这种字符串分布比较散的情况要注意多看看别漏(比如上面那一个.和一个s)魔改upx,是出题人加壳之后改的,把vmp改成UPX就可以脱壳了。用ida打开发现字符串长得像flag。upx脱壳发现脱不了。
2023-04-13 16:34:22 174 1
原创 [SWPUCTF 2021 新生赛]easyapp
就是一个异或,但注意这种情况因为数值太大所以要对结果取余(模128)找到主函数中的比较函数,看到一串中文字符,点进加密函数。得flag:NSSCTF{apkYYDS}后来发现Key值被替换。
2023-04-13 16:32:05 207
原创 [GFCTF 2021]wordy
利用idapython脚本解决重复工作 startaddr = 0x1135 endaddr = 0x3100 for i in range(startaddr,endaddr): if get_wide_byte(i) == 0xEB: if get_wide_byte(i+1) == 0xFF: patch_byte(i,0x90) print("[+] Addr {} is patched".format(hex(i)))再修改部分代码使程序能正常执行,最后运行直接打印出flag。
2023-04-13 16:30:11 326
原创 [GWCTF 2019]xxor
然后从上面看输入开始逆,注意这里是看不出来输入的长度,脚本跑出来的结果是18位的(大部分想要看长度只能通过check()这种专门的函数)这里unk_601060是Key的地址,它的值其实是[0002,0002,0003,0004](注意是小端存储,每一组要反着来读取)有一个位移操作,用c语言写脚本比较好,直接复制粘贴,for循环里的内容记得反着来,脚本得到。获取数的时候,注意几个一组,然后从下往上组合(注意是小端存储)进入sub_400770函数(比较判断),看到。得到flag{re_is_great!
2023-04-13 16:28:13 158
原创 [FlareOn4]IgniteMe
即将0x80070000向左循环移动4位,即× 24(相当于十六进制向左移动一位),得到0x00700008。v4为函数sub_401000()的返回值,下面的加密函数用v4对输入的字符串进行加密,所以先从sub_401000()函数得出v4的值。__ROL__()函数:循环左移函数,第一个数是循环左移的值,第二个参数是循环左移的位数,最后再整体逻辑右移。(还有动调跑过这个操作后查看ax的值的(返回值是int16所以只看16位,也就是ax),感觉非常方便)看wp遇到未知的函数可以从汇编看出函数操作的内容。
2023-04-13 16:27:25 258
原创 [FlareOn6]Overlong
更改程序把这里的1C改成80,即加密的操作循环28次改成128次,然后点应用进程序,再程序打开得到。所以加密长度不够长,只加密了前一部分,所以打开程序只跑出了前一小段解密出的字符串。是对Text的前a3,也就是前28位进行加密,但是Text有128位。打开发现一个加密函数,点进去。
2023-04-13 16:25:56 116 1
原创 BUUrsa入门题wp
题中给出 c1,c2,n,e1,e2 ,涉及 共模攻击。题中有p,q,dp,dq,c,所以由原理。(2).计算m1=(c^dp)modp;(3).计算m2=(c^dq)modq;(1).计算q模p的逆元I;有e,q,p,由公式求N。题中给出e,n,dp,c。
2023-04-09 22:34:24 270 1
原创 python逆向的常见思路
Python 代码先被编译为字节码后,再由Python虚拟机来执行字节码, Python的字节码是一种类似汇编指令的中间语言, 一个Python语句会对应若干字节码指令,虚拟机一条一条执行字节码指令, 从而完成程序执行。(在我的电脑上要先删除PYTHONHOME和路径才能用,删除该路径和path后打开py2exe所在文件夹,输入python2 unpy2exe.py exe路径即可)通常情况下struct中的文件头与pyc文件缺失的文件头前16位相同,复制粘贴进去即可。(三)将pyc转换成字节码。
2023-04-09 22:18:54 1644 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人