BUU_RE学习记录2

一.findit

1.得到apk文件,使用jeb打开,tab反编译,在MainActivitySource中发现关键词

image

2.在后面发现一串跟flag很像的字串

image

3.简单看一下后面的代码,发现是将后面的字串进行某种加密解密处理,把字串弄下来

点击查看代码
str = ['p', 'v', 'k', 'q', '{', 'm', '1', '6', '4', '6', '7', '5', '2', '6', '2', '0', '3', '3', 'l', '4', 'm', '4', '9', 'l', 'n', 'p', '7', 'p', '9', 'm', 'n', 'k', '2', '8', 'k', '7', '5', '}']
for i in str:
    print(i,end='')
pvkq{m164675262033l4m49lnp7p9mnk28k75}

4.凯撒解密得到flag

flag{c164675262033b4c49bdf7f9cda28a75}

image

二.rsa

1.得到一个key文件和一个enc文件,key文件010打开,发现是公钥

image

2.使用公钥分析网站:http://www.hiencode.com/pub_asys.html

image

3.得到n、e,分解n,网站:http://www.factordb.com/

image

4.得到p、q,使用脚本得到d

81176168860169991027846870170527607562179635470395365333547868786951080991441
点击查看代码
import gmpy2
p =gmpy2.mpz(285960468890451637935629440372639283459)
q =gmpy2.mpz(304008741604601924494328155975272418463)
e =gmpy2.mpz(65537)
phi_n= (p - 1) * (q - 1)
d = gmpy2.invert(e, phi_n)
print("d is:")
print (d)

5.已知pqend,使用脚本解密flag.enc文件,得到flag

点击查看代码
import rsa
e = 65537
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
d = 81176168860169991027846870170527607562179635470395365333547868786951080991441
key = rsa.PrivateKey(n,e,d,q,p)

with open("./flag.enc","rb") as f:
    f = f.read()
    print(rsa.decrypt(f,key))

image

三、[ACTF新生赛2020]rome

1.查壳,无壳,IDA(非64)打开

image

2.shiftF12查找字符,找到关键字符

image

3.点进函数,审计一下函数,发现flag的头ACTF{}

image

4.可以发现主要的加密函数就是两个while函数

image

5.简单处理一下伪代码

点击查看代码
while (v12[17] <= 15 )
{
    if (v1 + v12[17]) > 64 && v1 + v12[17]) <= 90 )
		(v1 + v12[17]) = (v1 + v12[17]) - 51) % 26 + 65;
    if (v1 + v12[17]) > 96 && v1 + v12[17]) <= 122 )
        (v1 + v12[17]) = (v1 + v12[17]) - 79) % 26 + 97;
    ++v12[17];
}
v12[17] = 0;
while (v12[17] <= 15 )
{
    result = v12[v12[17]];
    if (v1 + v12[17]) != result )
        return result;
    ++v12[17];
}

6.直接按照伪代码的加密方式写个脚本

点击查看代码
v12 = "Qsw3sj_lz4_Ujw@l"
v12 = list(v12)
flag = ''
for i in range(16):
    for j in range(128):
        x = j
        if chr(x).isupper():
            x = (x-51)%26+65
        if chr(x).islower():
            x = (x-79)%26+97
        if chr(x) == v12[i]:
            flag += chr(j)
print(flag)

7.得到的就是flag

flag{Cae3ar_th4_Gre@t}

image

四、[FlareOn4]login

1.得到一个html一个txt,用VS打开html,发现这个的原理就是一个if判断rotFlag,改一下代码,在if前面加一句alert(rotFlag)回显flag

image

2.进入网页,在框内输入源码中的字串

PyvragFvqrYbtvafNerRnfl@syner-ba.pbz

3.得到的回显中的内容就是flag

image

flag{ClientSideLoginsAreEasy@flare-on.com}

五、[GUET-CTF2019]re

1.查壳,有壳,UPXShell脱壳

image

2.IDA(64)打开,shiftF12找关键词,发现input flag,追踪到函数

image

3.发现主要是经过了一个重要的函数sub_4009AE(),点进去审计一下代码

image

4.全都是简单的if判断,通过观察可以发现a16和a17换位置了,同时没有a6,写个脚本逆回去可以得到的字符

点击查看代码
s1 = [1629056,6771600,3682944,10431000,3977328,5138336,7532250,5551632,3409728,13013670,6088797,7884663,8944053,5198490,4544518,10115280,3645600,9667504,5364450,13464540,5488432,14479500,6451830,6252576,7763364,7327320,8741520,8871876,4086720,9374400,5759124]
s2 = [166163712,731332800,357245568,1074393000,489211344,518971936,406741500,294236496,177305856,650683500,298351053,386348487,438258597,249527520,445362764,981182160,174988800,493042704,257493600,767478780,312840624,1404511500,316139670,619005024,372641472,373693320,498266640,452465676,208422720,515592000,719890500]

for i in range(len(s1)):
    print(chr(s2[i] // s1[i]),end='')

image

5.剩下的a6可以使用BP爆破或者猜测,最终a6是1,得到flag

flag{e165421110ba03099a1c039337}

image

六、[WUSTCTF2020]level1

1.查壳,无壳,IDA(64)打开,找到main函数

image

2.代码很简单,就是打开一个名为flag的文件,读入其中数据到ptr数组中,然后使用for循环进行对应的处理然后直接输出,名为flag的文件就是output.txt,写个脚本

点击查看代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
	int ls[20] = {0,198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000};
    for (int i = 1; i <= 19; ++i)
    {
        if (i & 1)
            printf("%c", (unsigned int)(ls[i] >> i));
        else
            printf("%c", (unsigned int)(ls[i] / i  ));
    }
}



3.得到flag

image

七、[WUSTCTF2020]level2

1.查壳,使用kali的upx命令脱壳(安装:https://blog.csdn.net/signed2008/article/details/108759559

image

2.使用IDA(非64)打开,搜索字串

image

3.发现flag

wctf2020{Just_upx_-d}

八、[MRCTF2020]hello_world_go

1.查壳,无壳,IDA(64)打开

image

2.查找字串,得到flag

image

flag{hello_world_gogogo}

九、[WUSTCTF2020]level3

1.查壳,无壳,IDA(64)打开

image

2.找关键字串,发现是和base64有关,进入函数

image

3.发现关键字串,一串base64加密后的字串,但是直接使用网站解密出来的是一串乱码,猜测是有变表

image

4.找一下字母表,进入base64_encode()函数,没啥发现,看一下旁边的函数列表,发现一个名字很奇特的函数

image

5.点进去,发现是将base64_table进行了运算,而base64_table就是加密的字母表,那就写个脚本运行一下得到加密用到的真正的字母表

image

点击查看代码
base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
base64_table = list(base64_table)
for i in range(10):
    v1 = base64_table[i]
    base64_table[i] = base64_table[19 - i]
    result = 19 - i
    base64_table[result] = v1

for i in base64_table:
    print(i,end='')

6.得到正确的字母表

TSRQPONMLKJIHGFEDCBAUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

7.使用这个字母表进行解密,脚本如下:

点击查看代码
import base64
import string

str1 = "d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD=="

string1 = "TSRQPONMLKJIHGFEDCBAUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))

8.得到flag

wctf2020{Base64_is_the_start_of_reverse}

image

十、[FlareOn4]IgniteMe

1.查壳,无壳,IDA(非64)打开

image

2.查找关键字串,发现关键字串,进入函数

image

3.可以发现主要的就是sub_4010F0()函数,点进去

image

4.可以看出是将byte_403180[]数组进行了加密,数组追踪就可以得到

image

5.写个脚本模拟一下过程,v4使用动调可以得到为4,贴了一个大佬的脚本

点击查看代码
byte_403000=[0x0D,0x26,0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C, 0x5D,0x5E, 0x45, 0x12, 0x2F, 0x17, 0x2B, 0x44, 0x6F, 0x6E, 0x56, 0x9,0x5F, 0x45, 0x47, 0x73, 0x26, 0x0A, 0x0D, 0x13, 0x17, 0x48, 0x42,0x1, 0x40, 0x4D, 0x0C, 0x2, 0x69, 0x0]
flag=""
L=len(byte_403000)-1
for i in range(len(byte_403000)):
    if i==0:
       byte_403000[L-i]= byte_403000[L-i]^0x4
    byte_403000[L-i-1] = byte_403000[L-i-1]^byte_403000[L-i]
    flag+=chr(byte_403000[L-i])
print(byte_403000)
print(flag[::-1])

6.得到flag

flag{R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com}

十一、特殊的 BASE64

1.查壳,无壳,IDA(64)打开,搜索关键字串

image

2.发现一串字母表和一个很像base64加密的字串,猜测是base64变表,使用脚本解密

点击查看代码
import base64
import string

str1 = "mTyqm7wjODkrNLcWl0eqO8K8gc1BPk1GNLgUpI=="

string1 = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0987654321/+"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))

3.得到flag

flag{Special_Base64_By_Lich}

image

十二、[MRCTF2020]Transform

1.查壳,无壳,IDA(64)打开

image

2.查字串,进入有关键字串的函数,发现了两个字符串数组

image

3.主要的加密关键就是一个for循环,循环33次,进行异或运算,flag的位数为33,写一个脚本逆一下

点击查看代码
flag = [0 for x in range (0,34)]
ls3 = []
ls1 = [0x9, 0x0A, 0x0F, 0x17, 0x7, 0x18, 0x0C, 0x6, 0x1, 0x10, 0x3, 0x11, 0x20,0x1D, 0x0B, 0x1E, 0x1B, 0x16, 0x4, 0x0D, 0x13, 0x14, 0x15, 0x2, 0x19,0x5, 0x1F, 0x8, 0x12, 0x1A, 0x1C, 0x0E, 0]
ls2 = [0x67,0x79,0x7B,0x7F,0x75,0x2B,0x3C,0x52,0x53,0x79,0x57,0x5E,0x5D,0x42,0x7B,0x2D,0x2A,0x66,0x42,0x7E,0x4C,0x57,0x79,0x41,0x6B,0x7E,0x65,0x3C,0x5C,0x45,0x6F,0x62,0x4D,0]

for i in range(33):
    ls3.append(ls2[i] ^ ls1[i])
    flag[ls1[i]] = ls3[i]

for i in flag:
    print(chr(i),end='')

4.得到flag

MRCTF{Tr4nsp0sltiON_Clph3r_1s_3z}

image

十三、Youngter-drive

1.查壳,UPX,kali脱壳

image

2.IDA(非64)打开,shiftF12查找关键字串,进入函数

image

3.主要有用的函数是__cdecl sub_411940(),用到的两个字串数组追踪可得到

image

4.贴一个大佬的脚本

点击查看代码
off_418000 = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"

off_418004 = "TOiZiZtOrYaToUwPnToBsOaOapsyS"

flag=''

for i in range(len(off_418004)):
    if i %2 == 0:
        flag += off_418004[i]
        continue
    for j,k in enumerate(off_418000):
        if off_418004[i] == k:
            if chr(j+38).isupper():
                flag += chr(j+38)
            else:
                flag += chr(j+96)

print(flag)

flag{ThisisthreadofwindowshahaIsESE}
posted @ 2022-12-26 14:08  CPYQY_orz  阅读(63)  评论(0编辑  收藏  举报