EasyGo(GO语言逆向分析+逻辑运算)
首先在main_main中调用了main_encode

// main.encode
void __golang main_encode()
{
__int64 v0; // r14
__int128 v1; // xmm15
unsigned __int64 i; // rax
void *v3; // rax
unsigned __int64 v4; // [rsp+0h] [rbp-20h]
_slice_interface_ a; // [rsp+8h] [rbp-18h] BYREF
void *retaddr; // [rsp+20h] [rbp+0h] BYREF
io_Writer v7; // 0:rax.8,8:rbx.8
io_Writer v8; // 0:rax.8,8:rbx.8
_slice_interface_ v9; // 0:rcx.8,8:rdi.16
_slice_interface_ v10; // 0:rcx.8,8:rdi.16
if ( (unsigned __int64)&retaddr <= *(_QWORD *)(v0 + 16) )
{
runtime_morestack_noctxt();
JUMPOUT(0x47C970LL);
}
for ( i = 0LL; (__int64)i < 16; i = v4 + 1 )
{
if ( i >= main_flag.len )
runtime_panicIndex();
main_flag.array[i] += 2;
if ( i >= main_flag.len )
runtime_panicIndex();
main_flag.array[i] ^= 3u;
*(_OWORD *)&a.array = v1;
if ( i >= main_flag.len )
runtime_panicIndex();
v4 = i;
v3 = runtime_convT32(0);
a.array = (interface_ *)&RTYPE_int32_0;
a.len = (int)v3;
v7.data = os_Stdout;
v7.tab = (runtime_itab *)&go_itab__ptr_os_File_comma_io_Writer;
v9.len = 1LL;
v9.cap = 1LL;
v9.array = (interface_ *)&a;
fmt_Fprint(v7, v9);
}
v8.data = os_Stdout;
v8.tab = (runtime_itab *)&go_itab__ptr_os_File_comma_io_Writer;
v10.array = 0LL;
*(_OWORD *)&v10.len = 0uLL;
fmt_Fprintln(v8, v10);
}


思路:
分析main.encode,就是每一位+2在异或3,找到main_flag的值,就可编写exp了
exp:
s = "jiqnnkssghwikjhg"
m = ""
mm = ""
for i in s:
m += chr(ord(i) + 2)
for j in m:
mm += chr(ord(j) ^ 3)
print(m)
print(mm)


浙公网安备 33010602011771号