buu ctf reverse 正在写
BUUCTF新年快乐将文件直接放入PEID中去分析,发现是有shell的exe(upx)所以要进行去shell的处理打开文件之后就是一个明文加密了,直接得到flag不一样的flag解密地图https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=Nzg4NjU5MTA2YzgxYjFlOTNhY2RiOWY2OTJjMzlkOThfQlkwVEVuQTR5NmpncWpPRVl4c3hhYlYyTHRPSlZyMlBfVG9rZW46Ym94Y25vUG5TTklMSUhTeGRCOEtuQlRlakFlXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNAhttps://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=MGEyMjE1NTQxZTVjMmVjMTdlNjMxNjM3MjI5NDdmM2FfWGwxVWU4QnpoUE5tY3FOZklYOVJ1VHpkcnhwTXVIQ1JfVG9rZW46Ym94Y244dVBHVlozdFVINmZYR2lDWE1YTjJlXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA可以看到最后是要 一个地址的数字成为‘#’之后才能得到flag因为题目提示了,不要用正常的逆向方法去解题那就试试别的分析代码,发现只有v3==*11110100001010000101111#可以利用,那我们应该怎么办?得到#,那么不就是得到字符串的最后一位嘛https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=OTQzMzI1YzQzYjlhZDEyNDdhOTU0ZTljODFlMjJmMjlfY3BOQUtvSmczZVE5WE5YMHZiWUNLYjNvdmtoTWNvSkVfVG9rZW46Ym94Y25ieFdFcmd0T3hobkFhTEZBVWdLVUZjXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA选择方向去执行上下左右这就是走迷宫嘛上面的数据按照5*5的规格去展示https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=YzljMjBhN2JkODA4NzM0N2QzZjg1YzYxZTUzYWRhODhfTmpzNnRXNGJJNVRiWk94N2l2Z1FzYjlkM2tIZjczM2NfVG9rZW46Ym94Y25zZkRPT054cEIyYkxuRVNUUmlvNUhiXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA我们在*的位置,要到#的位置-----》得到flagflag{222441144222}Simple rev 无shell的程序main函数:https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=N2UwNjZjYjNhMTUxMmFhZDc4NzYzYjBjOWQ5MjFhMzBfVFVud01Kb1djNjNQZmpDUk1sdGkyZGRhcHJSaHR3TlBfVG9rZW46Ym94Y25VS3hlWVFGZEpqS2YwSDFxd3lFZUZiXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA看出输入'Q''D''q''d'会让程序退出点开Decry函数https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=YmM3YWNiZTE5MTlkM2ZiMzdjY2QxMGUyNmI5OGYxMDdfM2V4Ymo2ajdyYTJJSTIwRU4yQ0NITVZRQXhWdHQxem9fVG9rZW46Ym94Y25YdWxJTTh4b0YzVDBPOE1nbVB0QXFiXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNAhttps://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=NGJmZTBiNmZmODJmMGY4ZmFkZmU3YzYzZWI1ZWVjZDBfcnJIcVdKUFdZc2I5eklSMnF3ZExTcnN0YUJSdWtHRHZfVG9rZW46Ym94Y24yeTQyZXBwUDFLM1FHcE51ZGx4RTNpXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA看到了我们的主要函数了https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=ZDg2ZmRlMDBmNWRkZmVlNTI1MGFkZmRkNmJmNzI2NzNfVkJaWGdoWHlIVzdpa3M5TE53UWJMNVNzTjdGd2VFSjRfVG9rZW46Ym94Y25xNm5VWlBucUNOZzJmeUdEeUZ3VlVkXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA看这里可以得到text==killswodahkey=ADSFKSLCDN
我们最终是要str2==text所以要看程序的加密过程了https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=ODcwOTc0OTgyZWUzZWRhNjY1YTkwZDEwY2YwYjI1ZDVfTmFZNUxNUk9jVGZtQXZtd1UzamFJelJUWnBJRXR5eTlfVG9rZW46Ym94Y25kQXVhSjhYQzZQZlo4SUx2UDM1NmNlXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA这里就将原来的字符大小增大32(ascll值)所以其实也就是将原来的key的大写全部转为小写
分析下面的程序:https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=OWYzODhhYTEzM2IwODBlZTA5M2ZhMTM3MjYxZTY1NzlfZndrazFHVDhnZVZ5V0k1NVlEUFZMMVUyMTNGVDgyaDBfVG9rZW46Ym94Y25yNGsxYUZwbWppTmZQdGd1OGo3cHJlXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA结合ascll表https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=YmU1NDAxZTQwZGI1NzJmMTdmOTI5MmRlM2NkMzJiZTNfam1GendqZHdFakg2anl2YXJ1cEZvQUx0SlhIR0NYQTJfVG9rZW46Ym94Y25tM0oxMVQyZmtFR284NmpTSWVIdlNmXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA大概的意思就是输入字符假如这个字符是大写或者小写字母就会进行一个str2 = (v1 - 39 - key + 97) % 26 + 97的加密操作操作之后的结果是将值赋给str2这个字符串
可以知道text的值是一个10个字节大小的字符串所以我们的str2也会是一个10字节大小的字符串
我们要怎么去找这个字符串加密之后的字符串和text相等呢???我们只能进行十次的遍历整个大小写的字母表然后挨个的去和text的每一位进行比对
脚本就可以这样写https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=MTUxNjQ4ZTQyZmFjMWUwMGIzMzcxZGRkNzdiMGQ3OWFfSnpWQXh6QmdQUldaR29LakRDWXVieXhnbXJ3Uzh6ZFRfVG9rZW46Ym94Y25yMFFRTjRtVnJqQTJzbEpxeXFFNTVmXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA先进行十个字符的循环遍历先判断是不是大小写字母然后进行加密假如加密之后的字符等于text中的text就直接将现在的字符记录下来然后进行打印(flag可以在左下角看到)flag{KLDQCOZFDU}
xor程序的主要意思是将原本的数据后一个数据异或上前一个数据直接脚本Shift +e 可以提前字符串的十六进制
https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=ZWFjOTZjZGY4ODhmOTI0ZTgzYjVhN2Y0ZTc2NTJkOTZfRHhvUXozcHYzM1VsYnNkSjNabWlmeWJnOWlrbHF0blZfVG9rZW46Ym94Y25jNTlsNlBlSldWQURoTUR3UFEyNGNpXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA
[*]luck_guy:
直接放到IDA64中去分析https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=YWNlN2Y0MWZjOTg1ZTQ0YzdhYTc3YjVhZjIyZDlkYmNfQ3hRVlhrYmR6b2xrWmpvMVdRZU0yd01COWNoVlpYRTJfVG9rZW46Ym94Y25kQkt2M1JJdmJiODRqWmJJd3QwdzRkXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA走到我们的主要函数里面去get_flag:https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=MjNhMDg4MTZiODQ4NWI4ZTZjYTMwMDJhOWZmY2EwMDdfWXZZQnJQdjVva2k5RDVvWTFXN0twZDlRZW0wYlhmRGRfVG9rZW46Ym94Y25nWHh1RTBCUDM1aXRiWHZzODdpRjJmXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNA这里我们可以看到是通过随机出数据来进行取余操作来进行不同的代码操作(这里要科普一波生成随机数,用rand函数生成的随机数都是伪随机的数据,也就是说虽然是生成的随机数,但是早就有规律,可以通过一定的方式求出)所以其实这个的进行不同的操作肯定是确定的操作来一步一步的进行的所以我们只能分析代码Case 1中可以得到 f1的值是多少但是 f2是没有赋值的,所以case1 肯定要在f2赋值之后进行case2,case3是师傅的bb话没用再看case4是f2的赋值所以呢case4肯定要在case1前面case5是对于f2的加密所以肯定是在case4的前面 总的逻辑:1.进行f2的赋值 2.进行f2的加密 3.进行s的追加所以我们可以直接写脚本了(注意:这里s的赋值是小端对齐,也就是低数据位对应的低地址,所以我们要将字符串从小端改为大端对齐)https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=MmE3MTA3YThjOTFlNzJlNjk0ZjRhY2VmZWIxOWEwNzFfS0R6VTRJalV2MndVWWlmM0VzcWJwSWxmb0laeVVxS3RfVG9rZW46Ym94Y25uZkpPRTRlZ1NRcVBwWUR0YjBaSmtlXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNAs=icug'ofF7x\脚本https://ryni70k1du.feishu.cn/space/api/box/stream/download/asynccode/?code=YzdhNGE0NmMyNGFiZjI5ZGZlZGE3MWYzNjczZTZlMmJfdkU1MDlQaFpueFl4MUR2RXZ1c3pFZUFPY0FZUnljcTVfVG9rZW46Ym94Y25UUHg0ZHRXUnJVUFVDZ3h1T0UwalFmXzE2Njk3OTc4NTg6MTY2OTgwMTQ1OF9WNAflag{do_not_hate_me} 这个如果是分享内容应该放到脱壳破解区的ctf分类中。
页:
[1]