0x00 Bugku Reverse简单题总结
介绍
由于逆向已有一定基础,部分题目过于简单不值得单开一个文档,所以将简单题全放在这里了。
0x01 入门逆向
URL
方法
丢进IDA32直接看到flag了
直接写个IDA脚本
static main(){
auto ad1,ad2;
ad1 = 0x40147A;
ad2 = 0x4014d9;
while(ad1<ad2){
msg("%c", byte(ad1+4));
ad1 = ad1 + 5;
}
}
0x02 Easy_Re
URL
方法
直接f5看到了xmmword_413E34这个变量,点进去一看很显然像16进制,ida脚本翻译一下(或者直接hex View查看)。
static main(){
auto add1 = 0x413e34;
auto add2 = 0x413e4C;
while(add1<add2){
msg("%c", byte(add1+0));
add1 = add1 + 1;
}
}
0x03 Signin
URL
方法
安卓apk,下载GDA工具。
res文件夹下strings.xml文件里。然后直接反转base64解码即可。
0x04 游戏过关
URL
方法
通过字符串的交叉引用找到关键代码
我是直接写了个IDC脚本
static main(){
auto ad1,ad2;
ad2=0x45ea55;
ad1=0x45e975;
auto tmpad = 0x0045ea55;
auto da1,da2;
while(ad1<ad2){
//msg("%d", GetOpnd(ad1,1));
da1 = GetOpnd(ad1,1);
//msg("%08x", next_not_tail(tmpad));
tmpad=next_not_tail(tmpad);
da2 = GetOpnd(tmpad,1);
ad1 = ad1+4;
msg("%c", xtol(da2)^xtol(da1)^0x13);
}
}
OD动态调试可能更快。
0x05 Easy_vb
URL
方法
这里非常奇怪,不知道是IDA版本还是什么关系,我的ida无法正常反汇编这个软件。
不过还是一眼看出来了。。
0x06 逆向入门
URL
方法
发现elf不是pe也不是。就010看了一下,图片转成base64。
找个地方解码即可。
解码图片直接扫就有flag了。
0x07 love
URL
方法
根据交叉引用找到关键字符串。
手动分析一下汇编
一眼for循环,以下为手动翻译伪代码
for(int i=0;i<lenth;i++;){
dst = dst[i]+i;
}
idc脚本
static main(){
auto ad=0x41a034;
auto c=0;
while(byte(ad)){
msg("%c",byte(ad)-c);
c = c+1;
ad = ad+1;
}
}
顺便分析一下base64编码。
0x08 Timer(阿里CTF)
URL
方法
素数算法
public static boolean is2(int n){
int ix = 1;
if (n <= 3) {
if (n <= ix) {
ix = false;
}
}else if(!((n % 2)) || !((n % 3))){
ix = false;
}else {
int i = 5;
int ix1 = i * i;
while (ix1 <= n) {
ix1 = n % i;
if (ix1) {
ix1 = i + 2;
ix1 = n % ix1;
if (ix1) {
i = i + 6;
}
}
ix = false;
break ;
}
}
return ix;
}
this.beg = (int)(System.currentTimeMillis() / 1000) + 0x30d40;
this.this$0.t = System.currentTimeMillis();
this.this$0.now = (int)(this.this$0.t / 1000);
if (((this.this$0.beg - this.this$0.now)) <= 0) {
this.val$tv1.setText("The flag is:");
this.val$tv2.setText("alictf{"+this.this$0.stringFromJNI2(this.this$0.k)+"}");
}
其实主要是看k的值。
def is_prime(n):
"""
判断一个整数是否为质数(素数)。
Args:
n: 要判断的整数。
Returns:
True,如果n是质数。
False,如果n不是质数。
"""
if n <= 1:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
sum=0
for i in range(2,0x30d40):
if is_prime(i):
sum+=100
else:
sum-=1
print(sum)
这是计算k值脚本。
文章评论