reversing.kr 前9题
近日写了reversing.kr的前九题。。。真的是一题比一题恶心。。。
写个wp吧,最近期末复习了(慌得一批)。。。
EasyCrack
这网站凡是带上(easy)的都不怎么难
简要带过吧
拖进ida
可以看到字符串比较
答案就是Ea5yR3versing
EasyKeygen
//那啥,一开始没看到这东西还有个readme。。。害得我搞了半天没搞懂怎么写。。。
//这网站所有带有readme的一定要认真看!!!
//不然就极有可能GG
加密过程就是与密钥异或
然后再与serial比较,既然serial已经告诉你,那就可以直接z3啦~
//最近在学习z3,当然大家也能用爆破
# -*- coding: UTF-8 -*-
from z3 import *
a = [0x5B,0x13,0x49,0x77,0x13,0x5E,0x7D,0x13]
key = [16,32,48]
s = Solver()
name = [BitVec('u%d'%i,8) for i in range(8)]
for i in range(8):
s.add(a[i] == (key[i%3]^name[i]))
if s.check() == sat:
result = s.model()
flag = ''
for i in range(8):
flag += chr(result[name[i]].as_long().real)
print flag
K3yg3nm3
Easyunpack
脱壳机一下
当然手脱也不是不行
//果断脱壳机2333
OEP是00401150
Music Player
程序是一个音乐播放器,但只能播放一分钟
所以大致思路就是改程序了
放进od里查找字符串
有个很可疑的1,这貌似和放到1min时候的弹窗有点关系
我们在这下断点
发现弹窗在这弹出
//播放的singledog没记错的话是moctf里的一道misc,具体看我前面的wp鸭
在上找关键跳转改成jmp后,运行,发现又一个弹窗
那就再刚刚跳转处下断点,再次运行
发现此处有弹窗
改关键跳转
保存文件
运行就能看到了
replace
smc鸭
看一下程序,拖进od后搜函数下断点
这边一段程序是吧输入的转化为16进制数
比如我输入123
转化为7B
走到这程序会炸
0x90就是nop了,对一个地方进行nop,在想想correct弹窗那的俩个jmp
其实就是要把00401071那里给nop掉
我们放进ida里也能看到,没有任何地方call了correct
那么大致思路就有了
多次实验即可得
imageprc
这个。。。完全没有思路。。。
没发现是个画图板子。。。
看了大佬的wp才发现的
可以用软件dump出里面的东西的。。。
这边就不写wp了
大家网上找吧2333
通向大佬的链接
Position
这题很奇怪,ida里找不到关键字符串,但od可以,用od找到关键函数段,在ida里搜索就能看到啦
首先是输入的限制(长度以及只能为小写字母)
其次是serial的生成方法
在这我只想说
z3大法好
题目告诉你可能有多解,又告诉你最后一位是p。
# -*- coding: UTF-8 -*-
from z3 import *
#76876-77776
name =[BitVec('u%d'%i,8) for i in range(4)]
s = Solver()
for i in range(4):
s.add(name[i]<=122)
s.add(name[i]>=97)
s.add(name[3] == ord('p'))
s.add((((name[0]&1)+5)+((name[1]>>2)&1)+1)==7)
s.add((((name[0]>>3)&1)+5+((name[1]>>3)&1)+1)==6)
s.add((((name[0]>>1)&1)+5+((name[1]>>4)&1)+1)==8)
s.add((((name[0]>>2)&1)+5+((name[1]&1)+1))==7)
s.add((((name[0]>>4)&1)+5+((name[1]>>1)&1)+1)==6)
s.add((((name[2]&1)+5)+((name[3]>>2)&1)+1)==7)
s.add(((((name[2]>>3)&1)+5)+((name[3]>>3)&1)+1)==7)
s.add(((((name[2]>>1)&1)+5)+((name[3]>>4)&1)+1)==7)
s.add((((name[2]>>2)&1)+5+((name[3]&1)+1))==7)
s.add((((name[2]>>4)&1)+5+((name[3]>>1)&1)+1)==6)
if s.check() == sat:
result = s.model()
flag = ''
for i in range(4):
flag += chr(result[name[i]].as_long().real)
print flag
bump
Direct3D FPS
射击游戏可还行
放进ida查找字符串
具体加密可以看到
但是byte——409184[v2*4]不知道是多少
运行一下用脚本可以得到
Congratulation~ Game Clear! Password is Thr3EDPr0m
Ransomware
readme里面说了file是个exe文件。。。。。。
//看了大佬wp才知道
这个run呢是加了upx壳
脱完后放进ida
发现有很多花指令啊
用py脚本去除后就可以反编译啦
加密过程不复杂,是直接对文件进行操作的,输入的是密钥
根据pe文件格式的特性,我们可以直接用z3求出来密钥
基本上pe文件都有这一段
直接把file的dump出来
用z3整一下
# -*- coding: UTF-8 -*-
from z3 import *
a = [0xC7,0xF2,0xE2,0xFF,0xAF,0xE3,0xEC,0xE9,0xFB,0xE5,0xFB,0xE1,0xAC,0xF0,0xFB,0xE5,0xE2,0xE0,0xE7,0xBE,0xE4,0xF9,0xB7,0xE8,0xF9,0xE2,0xB3,0xF3,0xE5,0xAC,0xCB,0xDC,0xCD,0xA6,0xF1,0xF8,0xFE,0xE9,0xA2]
b = [0x54,0x68,0x69,0x73,0x20,0x70,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x63,0x61,0x6E,0x6E,0x6F,0x74,0x20,0x62,0x65,0x20,0x72,0x75,0x6E,0x20,0x69,0x6E,0x20,0x44,0x4F,0x53,0x20,0x6D,0x6F,0x64,0x65,0x2E]
s = Solver()
key = [BitVec('u%d'%i,8) for i in range(39)]
for i in range(39):
s.add(b[i] == ~(a[i] ^ key[i]))
flag = ''
if s.check() == sat:
result = s.model()
for i in range(39):
flag += chr(result[key[i]].as_long().real)
print flag
发现输出是letsplaychessletsplaychessletsplaychess
那就是letsplaychess啦
输入密钥运行一下run
file就能运行了
Key -> Colle System
就写这么些了哈
下面还有的我会慢慢补上
呜啦啦~