Reversing.kr 全解记录

前言

此篇文章记录了我对Reversing.kr网站的解题过程,有的直接看的wp,有的自己复现了一遍。
先开个头,后续会慢慢补充。

题解

0x0 Easy_CrackMe

Ea5yR3versing

0x1 Easy_KeygenMe

K3yg3nm3

0x2 Easy_UnpackMe

00401150

0x3 Music_Player

LIstenCare
这几题比较简单直接贴上答案

0x4 Replace

ida打开,定位到关键字符串,向上回溯,下断,跟了一遍,程序在0040466F mov byte ptr [eax], 90h处报错,结合逻辑分析,eax和我们的输入相关,0x90代表着nop,继续往下看调用堆栈。
这里写图片描述
这里写图片描述
这里写图片描述
最后要跳转到loc_401071,为了到达correct处,我们需要将loc_401071处的代码nop,通过程序自身代码就可以做到,我们只需使eax==0x401071即可。
答案:2687109798

0x5 ImagePrc

。。写着写着忘记保存了,东西都丢了。还是定位到关键函数,然后找到对比的资源文件,这里建议使用resourcehacker工具将资源文件dump下来,然后写个简单的脚本即可。

from PIL import Image

width = 200
height = 150

image_file = open('Data_1.bin', 'rb')
data = image_file.read()
image = Image.frombuffer('RGB', (width, height), data, 'raw', 'RGB')
image = image.transpose(Image.FLIP_TOP_BOTTOM)
image.show()
image_file.close()

答案:GOT

0x6 Easy ELF

很简单的不想写了
答案:L1NUX

0x7 ransomware

首先upx然后又是一堆花指令,写个简单的ipython脚本patch一下,这里还是需要手动的修改函数头55 8B EC 83 EC 24 53 56 57,然后使用ida重新f5一下便可以看到反编译后的结果。
这里写图片描述
但是这个sub_401000函数还是被加了花,但是对逆向程序逻辑没有影响。
主要的加密过程,这里需要得到key值,观察pe文件可以看到题中给的hint,找到file文件对应的位置,解密得到key

enc='C7F2E2FFAFE3ECE9FBE5FBE1ACF0FBE5E2E0E7BEE4F9B7E8F9E2B3F3E5ACCBDCCDA6F1F8FEE9'.decode('hex')

dec='This program cannot be run in DOS mode'
key=''

enc = list(enc)
dec = list(dec)
for i in range(len(enc)):
    enc[i] = (~ord(enc[i]))&255
    key += chr(ord(dec[i])^enc[i])
print key

letsplaychess
最后解密file文件,得到exe文件,运行即可以得到flag

data_c = open('file','rb').read()
data_d=''
key='letsplaychess'
key_len = len(key)
for i in range(len(data_c)):
    data_d += chr(ord(key[i%key_len])^(~ord(data_c[i]))&255)

open('file.exe','wb').write(data_d)

答案:Colle System(我感觉如果没有提示有点脑洞了,看着wp写的)

0x8 CSHOP

这题有点神 输入一个空格 就可以看到 flag》??
不过还是有必要了解这个文件格式的CSHOP.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
./net框架,采用c#编写,使用dnSpy进行反编译,然后可以修改IL指令。感觉这个dnSpy工具还是用的少。
答案:P4W6RP6SES

0x9 Direct3D_FPS

我的电脑上无法运行这个程序,只能静态分析了,ida分析字符串,交叉引用到byte_407028
这里写图片描述
其中byte_407028的数据十分的可疑,但是无法确定result为何值,向上回溯,可以发现sub_403400在一个循环体中,可以猜测resulto-len(byte_407028),但是另一个角度来说,resultv2*4是线性关系,所以影响不大。
但是问题来了,通过交叉引用byte_409184发现此数据只有读的引用,没有写,因此在程序初始化时,此数据将被初始化,那么之前说了,我无法运行此程序,因此我在程序init下断,查看此时的byte_409184数据,我这里显示的都为0,但是我看wp却说是存在byte_409184[528*i] = 4*i这样的关系。
23333.

flag_c='436B666B62756C694C455C455F5A461C07252529701734390116494C20150B0FF7EBFAE8B0FDEBBCF4CCDA9FF5F0E8CEF0A9'.decode('hex')
flag_d=''
for i in range(len(flag_c)):
    flag_d += chr(ord(flag_c[i])^4*i)
print flag_d
#Congratulation~ Game Clear! Password is Thr3EDPr0m
0x10 HateIntel

mac下的程序,但是我没有mac的电脑,pizza来说静态看就是了,不过程序也简单,通过字符串,定位到关键函数(我经常这么写,因为确实是这么做的!)
这里写图片描述
算法不可逆,但是可以逐字节爆破,脚本也简单,注意下uint_8变量范围0-256即可。

dic = [0x44, 0xF6, 0xF5, 0x57, 0xF5, 0xC6, 0x96, 0xB6, 0x56, 0xF5, 0x14, 0x25, 0xD4, 0xF5, 0x96, 0xE6, 0x37, 0x47, 0x27, 0x57, 0x36, 0x47, 0x96, 0x03, 0xE6, 0xF3, 0xA3, 0x92, 0x00]
flg = ''
for j in range(len(dic)):
    for fl in range(256):
        k = fl
        for i in range(4):
            tmp = (k*2)
            if tmp&0x100:
                tmp |= 1
            k = tmp%256
        if k == dic[j]:
            flg +=chr(fl)
print flg

答案:Do_u_like_ARM_instructi0n?:)

0x11 Flash Encrypt

下载ffdec工具同样的分析字符串,依次输入1456,25,44,8,88,20546
这题我没有复现,flash打不开。
答案:16876

0x12 Position

这题之前做z3总结的时候做过,写出约束条件,然后z3求解即可

from z3 import *
username = [BitVec('u%d'%i,8) for i in range(0,4)]
solver = Solver() #76876-77776
solver.add(((username[0]&1)+5+(((username[1]>>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值