随笔分类 - CTF
逆向的基本要求
摘要:#查壳: (后来发现:但凡有这玩意的都和解包有关) ##32位,运行,发现让我们输入一个key,进IDA: ###把能找的都找了,愣是没发现什么,除了一个类似base64的编码,实在没办法,去看了大佬的文章,说是py下的exe的解包,跟据大佬们的思路来了一波,果然出来了。 ###开始吧,首先是将该运
阅读全文
摘要:#查壳: ##64位,操作系统是ubantu的,可能会有所不同稍加留意一下,进IDA: ###依旧是比较题,我们先看看s2里的内容:‘TlNTQ1RGe2Jhc2VfNjRfTlRXUTRaR0ROQzdOfQ==’ ###目标是v3,看看v3调用的函数sub_124C: ####base64?看看
阅读全文
摘要:#查壳: ##64位,进IDA: ###好家伙,不给看伪代码,来吧汇编走起: ####设置两个段,一个数据段(dseg),一个额外段(seg001)看看吧,dseg段中的内容'hgame{Fill_in_your_flag}' ####seg001段中的内容:(不想说话) ####关键: ####逐
阅读全文
摘要:查壳: 发现里边有个压缩包,弄出来看看: 再查壳看看: 啥也不是,把它扔进IDA: 没有伪代码,一个字‘找’,关键点(是否IDA能成功反编译,还是说用了java的反编译才行,是否有flag或者CTF之类的字样): 发现特殊字样,跟进: 大写String?大胆点进jadx: 成功,告诉我们什么?要大胆
阅读全文
摘要:#查壳: ##发现是一个.pyc的文件,有啥好说的吗?直接 uncompyle6 咯得到.py文件: ###双击进入: ###有些人会因为from那行出错,应该是没装包,可以cmd,然后pip install pycryptodome ####大概就是将,从password.txt中读出一串密码 #
阅读全文
摘要:#查壳: ##64位,进IDA: ###看正确输出: ####有要比较的两个字符a5mc58bphliax7j和Buf1,可以知道目的字符串是a5mc58bphliax7j,跟进看看: ####再看看Buf1,可以看见它是根据我们输入的字符进行sub_401570方法后得到的,那么我们跟进: ###
阅读全文
摘要:#查壳: ##双击吧: ###简单的逻辑,不要怕那个循环,也不要去纠结那个循环。 ####首先看我们要找的是啥:b1嘛,也就是将flag每个字符转化成十进制后,再转成二进制,一个字符的二进制接后一个字符的二进制链接而成的字符串,再将这串字符串转为十进制。也就是b1 ####由除法原则我们知道,要想还
阅读全文
摘要:#查壳: ##有壳,32位,先脱再进IDA: ####上来就给答案:得到NSSCTF{Just_upx_-d}{Just_upx_-d}
阅读全文
摘要:#查壳: ##64位,进IDA: ###进来后发现c++经常用的std,(当然用c++的也有可能不经常见),跟进伪代码,找输出: ####有个判断跟进Human::~Human看看: ####调用了一个方法,字符串又指向了name,跟进方法:off_4863D0: ####发现存了一个基地址:跟进基
阅读全文
摘要:#查壳: ##64位:进IDA: ###进来就给flag:跟进: ###一堆东西,秉承着赶时间的优良作风,只看有用的输出: ###挺简单一个随机数问题,找种子就行: ####上脚本: int main(){ srand(10086); for (int i = 1; i <= 13; i++) {
阅读全文
摘要:查个壳: 没得东西:双击进去咯: 随机序列问题: 这里要提几点点: 一:同一个种子下获得的再次获得的随机数是相同的 怎么理解这个呢,上图理解: 能看到我们两次的随机数是完全一样的,但是如果不加random.seed(1)这一句或者将种子换了,就不一定会得到相同的数字了: 二:random.getra
阅读全文
摘要:#查壳 ##64位,进IDA: ###你会发现,啥也没有,别急,再找找:空格切换视图: ####往下走: ####发现这里存了一堆东西:A转化成字符串: ####继续找: ####发现转化不了,看看是不是程序爆了: ###发现:是这条代码爆红了,没发现堆栈不平衡,试试nop掉: ###发现依旧没用,
阅读全文
摘要:#查壳: ##进入: ###不是很难的逻辑,浅浅来个爆破过了:(这里提醒一下,如果实在逆推不出来,可以考虑爆破,爆破应该是RE里人手一个的必备) result1 = 'v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i' flag1 = '' num = 0 for
阅读全文
摘要:#查个壳: ##64位,运行: ###进IDA看看: ####简单加密函数,不多赘述上脚本就好: int main(){ string Des = "ylqq]aycqyp{"; string flag = ""; for (int i = 0; i < Des.size(); i++) { for
阅读全文
摘要:#拿到一个.py的文件,查个壳: ##进入看看是怎么个解密: ###挺长,感觉还有点像RC4的加密方式(这个不讨论),往下看逻辑: ####首根据输出,我们能知道,加密后的文档应该是enc,enc又是由crypt而来,crypt又是由cipher而来,而cipher又是由res而来: ###看看re
阅读全文
摘要:#C的源代码,查个壳: ##一般都是64位,直接双击吧,换个界面,成天看IDA也不好: ###也是简单的一个异或加密,上个脚本就好了,不多说啥: Des = 'd`vxbQd' flag = '' for i in Des: flag += chr((ord(i) ^ 2) - 1) print(f
阅读全文
摘要:#得到.exe,先查壳: ##么得壳,64位:运行一下看看:是个字符串的比较:进IDA: ###简单的一个加密(不多解释了)上个脚本就行: Des = '{34sy_r3v3rs3}' flag = '' for i in Des: if ord(i) == 51: flag += chr(101)
阅读全文
摘要:得到一个.py文件,一般是没壳的,不过还是要养成习惯,查个壳: 意料之中,啥也没有,打开文件: 给了我们一个加密逻辑,然后最后一行给了一个结果:那么就是根据上述的逻辑,反解密出flag就好了 分析一下上述逻辑: 首先对list进行变化得到key的值(怎么变化不用理,因为用不到,为啥?因为是异或昂,而
阅读全文
摘要:#查壳: ###有壳32位,脱了,看看运行:无法运行,那么进IDA看看: ####找个主函数: ####发现没了,那么再找找 ####密文?不确定,跟进看看: ####来到一个输出正确flag的地方,可以知道Des就是我们要找的东西:去看看有谁调用过它: ####有两,第一个就是上图的输出,那么我们
阅读全文
摘要:查壳 有壳,脱了 进入IDA: 会发现我们看不了伪代码,那么看看爆在哪了: 这有标红的,那么把这里改了(IDA改的有点麻烦,建议用OD贼快)这里注意哦,报错点上边还有一个jnz跳转指令,这个是指向报错点的,那么要不要改呢?小小的期待一下: 接下来演示怎么改,这里注意这个call占了很多个字节,我们只
阅读全文
浙公网安备 33010602011771号