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)

posted @ 2025-05-15 23:25  lethe311  阅读(46)  评论(0)    收藏  举报