这题真的是学到了不少。

知识点:pin插桩、idapython动调脚本、基于srop的控制流、rc4、魔改tea

大体分析

image-20201117162310992

main函数是假的。

输入后,第10行先把十六进制字符串转换成字符串(2byte->1Byte)。

第14行的函数存在栈溢出,控制流跳走。

之后就是通过srop来实现控制流。

image-20201117162728186

srop简单来说,就是把当前的状态(寄存器,返回地址等值)存入栈内,转入内核处理,然后跳转至栈内之前存的当前状态中的返回地址处继续执行。

动调跟了下,发现40B188处的值为4011E0,所以跳转到4011E0处执行。然后执行完这个函数后,srop至40AFE8处存储的4015F1处继续执行。

image-20201117165543055

image-20201117165558784

发现每次srop的返回地址都在这附近存储,相隔0x1a0。比如0x40b188, 0xafe8, 0x40ae48, 0x40aca8

每次执行完,都会减0x1a0。

所以我认为每个srop的块是0x1a0。每个块都记录了一次某个状态:除了返回地址之外,还有寄存器的值等等。

可以观察到每次srop都要走到:

mov     rax, 0Fh
syscall                 ; LINUX - sys_rt_sigreturn
nop
ud2

所以可以使用idapython查找ud2指令来定位所有含有srop启动指令的函数:

print '开始运行脚本,当前时间:%s'%time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 

import idautils
ea = MinEA()
maxea = MaxEA()
while ea < maxea:
    if idc.GetMnem(ea) == 'ud2':
        print hex(ea)[2:-1], idc.GetMnem(ea)
        
        start = ea-10
        for i in range(start, start+12):
            #print hex(i)
            PatchByte(i, 0x90)
        PatchByte(start, 0xc3)
        
    ea = idc.NextAddr(ea)
                
print '结束运行脚本,当前时间:%s\n'%time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 
开始运行脚本,当前时间:2020-11-17 17:34:44
40115c ud2
4011de ud2
4012e8 ud2
4013f8 ud2
40145c ud2
401475 ud2
4014d4 ud2
401533 ud2
401592 ud2
4015ef ud2
401632 ud2
4017eb ud2
结束运行脚本,当前时间:2020-11-17 17:34:44

然后依次去上述地址创建函数并分析。

srop实现的主要逻辑是:

rc4

先跳到401634,是个rc4。动调可以拿到key,共8byte.

void __usercall __noreturn rc4(__int64 a1@<rax>, unsigned __int64 a2@<rdx>, __int64 a3@<rcx>, unsigned __int64 a4@<rdi>, int a5@<esi>)
{
  int i; // ebx
  int v6; // er12
  int j; // ebx
  unsigned int v8; // er13
  signed int v9; // ebx
  int v10; // er12
  int k; // er13
  int v12; // er14
  signed __int64 v13; // rax

  unk_40BCA0 = a5;
  *((_DWORD *)&unk_40BCA0 + 1) = a4;
  for ( i = 0; i <= 255; ++i )
  {
    *(_DWORD *)(a2 + 4LL * i) = i;
    a4 = a1 + 4LL * i;
    *(_DWORD *)a4 = *((unsigned __int8 *)&unk_40BCA0 + i % 8);
  }
  LOBYTE(v6) = 0;
  for ( j = 0; j <= 255; ++j )
  {
    v6 = (unsigned __int8)(*(unsigned int *)(a2 + 4LL * j) + v6 + *(_DWORD *)(a1 + 4LL * j));
    v8 = *(_DWORD *)(a2 + 4LL * v6);
    *(_DWORD *)(a2 + 4LL * v6) = *(_DWORD *)(a2 + 4LL * j);
    a4 = v8;
    *(_DWORD *)(a2 + 4LL * j) = v8;
  }
  v9 = 0;
  LOBYTE(v10) = 0;
  for ( k = 0; k <= 15; ++k )
  {
    v9 = (unsigned __int8)(((unsigned int)((v9 + 1) >> 31) >> 24) + v9 + 1) - ((unsigned int)((v9 + 1) >> 31) >> 24);
    v10 = (unsigned __int8)(v10 + *(_DWORD *)(a2 + 4LL * v9));
    v12 = *(_DWORD *)(a2 + 4LL * v10);
    *(_DWORD *)(a2 + 4LL * v10) = *(_DWORD *)(a2 + 4LL * v9);
    *(_DWORD *)(a2 + 4LL * v9) = v12;
    a4 = a2;
    *(_BYTE *)(a3 + k) ^= *(_BYTE *)(a2
                                   + 4LL
                                   * (unsigned __int8)(*(unsigned int *)(a2 + 4LL * v9) + *(_DWORD *)(a2 + 4LL * v10)));
  }
  v13 = sys_rt_sigreturn(a4);
  BUG();
}

我当时还在硬逆这个逻辑,没想到是rc4,这里给出一个rc4的实现,下次可以对照着判断:

//程序开始
#include<stdio.h>
#include<string.h>
typedef unsigned longULONG;
 
/*初始化函数*/
void rc4_init(unsigned char*s, unsigned char*key, unsigned long Len)
{
    int i = 0, j = 0;
    char k[256] = { 0 };
    unsigned char tmp = 0;
    for (i = 0; i<256; i++)
    {
        s[i] = i;
        k[i] = key[i%Len];
    }
    for (i = 0; i<256; i++)
    {
        j = (j + s[i] + k[i]) % 256;
        tmp = s[i];
        s[i] = s[j];//交换s[i]和s[j]
        s[j] = tmp;
    }
}
 
/*加解密*/
void rc4_crypt(unsigned char*s, unsigned char*Data, unsigned long Len)
{
    int i = 0, j = 0, t = 0;
    unsigned long k = 0;
    unsigned char tmp;
    for (k = 0; k<Len; k++)
    {
        i = (i + 1) % 256;
        j = (j + s[i]) % 256;
        tmp = s[i];
        s[i] = s[j];//交换s[x]和s[y]
        s[j] = tmp;
        t = (s[i] + s[j]) % 256;
        Data[k] ^= s[t];
    }
}
 
int main()
{
    unsigned char s[256] = { 0 }, s2[256] = { 0 };//S-box
    char key[256] = { "justfortest" };
    char pData[512] = "这是一个用来加密的数据Data";
    unsigned long len = strlen(pData);
    int i;
 
    printf("pData=%s\n", pData);
    printf("key=%s,length=%d\n\n", key, strlen(key));
    rc4_init(s, (unsigned char*)key, strlen(key));//已经完成了初始化
    printf("完成对S[i]的初始化,如下:\n\n");
    for (i = 0; i<256; i++)
    {
        printf("%02X", s[i]);
        if (i && (i + 1) % 16 == 0)putchar('\n');
    }
    printf("\n\n");
    for (i = 0; i<256; i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!
    {
        s2[i] = s[i];
    }
    printf("已经初始化,现在加密:\n\n");
    rc4_crypt(s, (unsigned char*)pData, len);//加密
    printf("pData=%s\n\n", pData);
    printf("已经加密,现在解密:\n\n");
    //rc4_init(s,(unsignedchar*)key,strlen(key));//初始化密钥
    rc4_crypt(s2, (unsigned char*)pData, len);//解密
    printf("pData=%s\n\n", pData);
    return 0;
}
 
//程序完

vm - tea

然后走了个类似vm的东西。有六七条指令。举个例子:

image-20201117165409152

image-20201117165336726

用pin插桩来记录下指令流。

pin

脚本

修改自借助Pin插桩技术解决CTF中的VMP问题

iyzyi-flow-2.cpp:

/*
 * Copyright 2002-2020 Intel Corporation.
 * 
 * This software is provided to you as Sample Source Code as defined in the accompanying
 * End User License Agreement for the Intel(R) Software Development Products ("Agreement")
 * section 1.L.
 * 
 * This software and the related documents are provided as is, with no express or implied
 * warranties, other than those that are expressly stated in the License.
 */

#include <stdio.h>
#include "pin.H"

FILE * trace;

VOID printip(ADDRINT *ip,ADDRINT *rax,ADDRINT *rdx,ADDRINT *rcx,ADDRINT *rbx) { 
  //打印虚拟机log  
  ADDRINT *a1 = rax;
  ADDRINT *a2 = rdx;
  ADDRINT *a3 = rcx;
  ADDRINT *a4 = rbx;

  if((long int)ip == 0x004015F1){ //mov
        if(a4){
            fprintf(trace, "%p\tMOV a2[%p], a2[%p]\n", ip, a1, a3);
        }else{
            fprintf(trace, "%p\tMOV a2[%p], %p\n", ip, a1, a3);
        }
    }else if ((long int)ip == 0x401594){ //add
        if(a4){
            fprintf(trace, "%p\tADD a2[%p], a2[%p]\n", ip, a1, a3);
        }else{
            fprintf(trace, "%p\tADD a2[%p], %p\n", ip, a1, a3);
        }
    }else if ((long int)ip == 0x401477){ //xor
        if(a4){
            fprintf(trace, "%p\tXOR a2[%p], a2[%p]\n", ip, a1, a3);
        }else{
            fprintf(trace, "%p\tXOR a2[%p], %p\n", ip, a1, a3);
        }
    }else if ((long int)ip == 0x401408){ //cmp
        if(a4){
            fprintf(trace, "%p\tCMP a2[%p], a2[%p]\n", ip, a1, a3);
        }else{
            fprintf(trace, "%p\tCMP a2[%p], %p\n", ip, a1, a3);
        }
    }else if ((long int)ip == 0x401464){ //jmp or go on
        if(a2){    // not a4!!!
            fprintf(trace, "%p\tREPEAT CURRENT SROP\n\n", ip);
        }else{
            fprintf(trace, "%p\tJMP NEXT SROP\n\n", ip);
        }
    }else if ((long int)ip == 0x401535){ //shr
        if(a4){
            fprintf(trace, "%p\tSHR a2[%p], a2[%p]\n", ip, a1, a3);
        }else{
            fprintf(trace, "%p\tSHR a2[%p], %p\n", ip, a1, a3);
        }
    }else if ((long int)ip == 0x4014D6){ //shl
        if(a4){
            fprintf(trace, "%p\tSHL a2[%p], a2[%p]\n", ip, a1, a3);
        }else{
            fprintf(trace, "%p\tSHL a2[%p], %p\n", ip, a1, a3);
        }
    }
}
VOID Instruction(INS ins, VOID *v){
    long int opList[] = {0x004015F1, 0x401594, 0x401477, 0x401408, 0x401464, 0x401535, 0x4014D6};//需要插桩的地址
    long int ip = INS_Address(ins);
    bool flag = false;
    for (size_t i = 0; i < 7; i++){
        if(ip == opList[i]){
            flag = true;
            break;
        }
    }//进行指令级别插桩
    if(flag){//IPOINT_BEFORE在指令执行前插桩
        INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)printip,
                   IARG_INST_PTR,
                   IARG_REG_VALUE,REG_EAX,
                   IARG_REG_VALUE,REG_EDX,
                   IARG_REG_VALUE,REG_ECX,
                   IARG_REG_VALUE,REG_EBX,
                   IARG_END);
    }
  //以IARG_REG_VALUE,REG_EAX的形式将执行这条指令前的寄存器值传入
}

VOID Fini(INT32 code, VOID *v)
{
    fprintf(trace, "#eof\n");
    fclose(trace);
}

/* ===================================================================== */
/* Print Help Message                                                    */
/* ===================================================================== */

INT32 Usage()
{
    PIN_ERROR("This Pintool log flow\n" 
              + KNOB_BASE::StringKnobSummary() + "\n");
    return -1;
}

/* ===================================================================== */
/* Main                                                                  */
/* ===================================================================== */

int main(int argc, char * argv[])
{
    trace = fopen("itrace.out", "w");

    // Initialize pin
    if (PIN_Init(argc, argv)) return Usage();

    // Register Instruction to be called to instrument instructions
    INS_AddInstrumentFunction(Instruction, 0);
    // Register Fini to be called when the application exits
    PIN_AddFiniFunction(Fini, 0);

    // Start the program, never returns
    PIN_StartProgram();

    return 0;
}

如何编译并使用pin的脚本

官网直接下载pin

然后将你写的cpp放入./source/tools/ManualExamples

然后假如cpp是iyzyi-flow-2.cpp,那么make iyzyi-flow-2.test,注意不是make iyzyi-flow-2.cpp

./source/tools/ManualExamples/obj-intel64会生成定制脚本的so程序。

用根目录下的pin来启动题目的程序,并用生成的so进行插桩:../../../pin -t obj-intel64/iyzyi-flow-2.so -- /home/iyzyi/re/flow

iyzyi@ubuntu:~/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux$ ls
doc     ia32     itrace.out  pin      README  strace.out
extras  intel64  licensing   pin.sig  source
iyzyi@ubuntu:~/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux$ cd source/tools/ManualExamples/
iyzyi@ubuntu:~/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/source/tools/ManualExamples$ ls | grep iyzyi
iyzyi-1.cpp
iyzyi-flow-2.cpp
iyzyi@ubuntu:~/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/source/tools/ManualExamples$ make iyzyi-flow-2.cpp
make: Nothing to be done for 'iyzyi-flow-2.cpp'.
iyzyi@ubuntu:~/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/source/tools/ManualExamples$ make iyzyi-flow-2.test
g++ -Wall -Werror -Wno-unknown-pragmas -D__PIN__=1 -DPIN_CRT=1 -fno-stack-protector -fno-exceptions -funwind-tables -fasynchronous-unwind-tables -fno-rtti -DTARGET_IA32E -DHOST_IA32E -fPIC -DTARGET_LINUX -fabi-version=2 -faligned-new  -I../../../source/include/pin -I../../../source/include/pin/gen -isystem /home/iyzyi/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/extras/stlport/include -isystem /home/iyzyi/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/extras/libstdc++/include -isystem /home/iyzyi/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/extras/crt/include -isystem /home/iyzyi/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/extras/crt/include/arch-x86_64 -isystem /home/iyzyi/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/extras/crt/include/kernel/uapi -isystem /home/iyzyi/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/extras/crt/include/kernel/uapi/asm-x86 -I../../../extras/components/include -I../../../extras/xed-intel64/include/xed -I../../../source/tools/Utils -I../../../source/tools/InstLib -O3 -fomit-frame-pointer -fno-strict-aliasing   -c -o obj-intel64/iyzyi-flow-2.o iyzyi-flow-2.cpp
g++ -shared -Wl,--hash-style=sysv ../../../intel64/runtime/pincrt/crtbeginS.o -Wl,-Bsymbolic -Wl,--version-script=../../../source/include/pin/pintool.ver -fabi-version=2    -o obj-intel64/iyzyi-flow-2.so obj-intel64/iyzyi-flow-2.o  -L../../../intel64/runtime/pincrt -L../../../intel64/lib -L../../../intel64/lib-ext -L../../../extras/xed-intel64/lib -lpin -lxed ../../../intel64/runtime/pincrt/crtendS.o -lpin3dwarf  -ldl-dynamic -nostdlib -lstlport-dynamic -lm-dynamic -lc-dynamic -lunwind-dynamic
../../../pin   -t obj-intel64/iyzyi-flow-2.so -- ../../../source/tools/Utils/obj-intel64/cp-pin.exe makefile obj-intel64/iyzyi-flow-2.makefile.copy \
  > obj-intel64/iyzyi-flow-2.out 2>&1
cmp makefile obj-intel64/iyzyi-flow-2.makefile.copy
rm obj-intel64/iyzyi-flow-2.makefile.copy
rm obj-intel64/iyzyi-flow-2.out
iyzyi@ubuntu:~/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/source/tools/ManualExamples$ ../../../pin -t obj-intel64/iyzyi-flow-2.so -- /home/iyzyi/re/flow
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
iyzyi@ubuntu:~/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/source/tools/ManualExamples$ gedit itrace.out 
iyzyi@ubuntu:~/re/pin/pin-3.16-98275-ge0db48c31-gcc-linux/source/tools/ManualExamples$ 

image-20201117152138636

pin插桩的输出

pin插桩的输出

0x4015f1    MOV a2[0x4], 0x79757361         ; key[0]
0x4015f1    MOV a2[0x5], 0x79796473
0x4015f1    MOV a2[0x6], 0xdeadbeef
0x4015f1    MOV a2[0x7], 0xaa114514


0x4015f1    MOV a2[0xd], 0x0
0x4015f1    MOV a2[0xb], a2[0x0]            ; input[0]
0x4015f1    MOV a2[0xc], a2[0x1]            ; input[1]

0x401594    ADD a2[0xd], 0x9e3779b9         ; sum
0x4015f1    MOV a2[0x8], a2[0xb]            
0x401594    ADD a2[0x8], a2[0xd]            ; input[0] + sum
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5                ; input[0] >> 5
0x401594    ADD a2[0x9], a2[0x5]            ; (input[0] >> 5) + key[1]
0x401477    XOR a2[0x8], a2[0x9]            ; (input[0] + sum) ^ ((input[0] >> 5) + key[1])
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4                ; input[0] << 4
0x401594    ADD a2[0x9], a2[0x4]            ; (input[0] << 4) + key[0]
0x401477    XOR a2[0x8], a2[0x9]            ; tmp = (input[0] + sum) ^ ((input[0] >> 5) + key[1]) ^ ((input[0] << 4) + key[0])
0x401594    ADD a2[0xc], a2[0x8]            ; input[1] += tmp
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]            ; input[1] + tmp + sum
0x4015f1    MOV a2[0x9], a2[0xc]            
0x401535    SHR a2[0x9], 0x5                ; (input[1] + tmp) >> 5
0x401594    ADD a2[0x9], a2[0x7]            ; ((input[1] + tmp) >> 5) + key[3]
0x401477    XOR a2[0x8], a2[0x9]            ; (input[1] + tmp + sum) ^ (((input[1] + tmp) >> 5) + key[3])
0x4015f1    MOV a2[0x9], a2[0xc]            
0x4014d6    SHL a2[0x9], 0x4                ; (input[1] + tmp) << 4
0x401594    ADD a2[0x9], a2[0x6]            ; ((input[1] + tmp) << 4) + key[2]
0x401477    XOR a2[0x8], a2[0x9]            ; (input[1] + tmp + sum) ^ (((input[1] + tmp) >> 5) + key[3]) ^ (((input[1] + tmp) << 4) + key[2])
0x401594    ADD a2[0xb], a2[0x8]            ; input[0] = (input[1] + tmp + sum) ^ (((input[1] + tmp) >> 5) + key[3]) ^ (((input[1] + tmp) << 4) + key[2])
0x401594    ADD a2[0xa], 0x1                ; i
0x401408    CMP a2[0xa], 0x20               ; i < 32
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    JMP NEXT SROP


0x4015f1    MOV a2[0x0], a2[0xb]
0x4015f1    MOV a2[0x1], a2[0xc]
0x4015f1    MOV a2[0xa], 0x0
0x4015f1    MOV a2[0xd], 0x0
0x4015f1    MOV a2[0xb], a2[0x2]
0x4015f1    MOV a2[0xc], a2[0x3]

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    REPEAT CURRENT SROP

0x401594    ADD a2[0xd], 0x9e3779b9
0x4015f1    MOV a2[0x8], a2[0xb]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x5]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x4]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xc], a2[0x8]
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]
0x4015f1    MOV a2[0x9], a2[0xc]
0x401535    SHR a2[0x9], 0x5
0x401594    ADD a2[0x9], a2[0x7]
0x401477    XOR a2[0x8], a2[0x9]
0x4015f1    MOV a2[0x9], a2[0xc]
0x4014d6    SHL a2[0x9], 0x4
0x401594    ADD a2[0x9], a2[0x6]
0x401477    XOR a2[0x8], a2[0x9]
0x401594    ADD a2[0xb], a2[0x8]
0x401594    ADD a2[0xa], 0x1
0x401408    CMP a2[0xa], 0x20
0x401464    JMP NEXT SROP

0x4015f1    MOV a2[0x2], a2[0xb]
0x4015f1    MOV a2[0x3], a2[0xc]
#eof

魔改tea-vm逻辑分析

观察上面的伪代码,可以看出是64次基本相同的代码块。

这里复制一下第一次的:

0x4015f1    MOV a2[0x4], 0x79757361         ; key[0]
0x4015f1    MOV a2[0x5], 0x79796473
0x4015f1    MOV a2[0x6], 0xdeadbeef
0x4015f1    MOV a2[0x7], 0xaa114514


0x4015f1    MOV a2[0xd], 0x0
0x4015f1    MOV a2[0xb], a2[0x0]            ; input[0]
0x4015f1    MOV a2[0xc], a2[0x1]            ; input[1]

0x401594    ADD a2[0xd], 0x9e3779b9         ; sum
0x4015f1    MOV a2[0x8], a2[0xb]            
0x401594    ADD a2[0x8], a2[0xd]            ; input[0] + sum
0x4015f1    MOV a2[0x9], a2[0xb]
0x401535    SHR a2[0x9], 0x5                ; input[0] >> 5
0x401594    ADD a2[0x9], a2[0x5]            ; (input[0] >> 5) + key[1]
0x401477    XOR a2[0x8], a2[0x9]            ; (input[0] + sum) ^ ((input[0] >> 5) + key[1])
0x4015f1    MOV a2[0x9], a2[0xb]
0x4014d6    SHL a2[0x9], 0x4                ; input[0] << 4
0x401594    ADD a2[0x9], a2[0x4]            ; (input[0] << 4) + key[0]
0x401477    XOR a2[0x8], a2[0x9]            ; tmp = (input[0] + sum) ^ ((input[0] >> 5) + key[1]) ^ ((input[0] << 4) + key[0])
0x401594    ADD a2[0xc], a2[0x8]            ; input[1] += tmp
0x4015f1    MOV a2[0x8], a2[0xc]
0x401594    ADD a2[0x8], a2[0xd]            ; input[1] + tmp + sum
0x4015f1    MOV a2[0x9], a2[0xc]            
0x401535    SHR a2[0x9], 0x5                ; (input[1] + tmp) >> 5
0x401594    ADD a2[0x9], a2[0x7]            ; ((input[1] + tmp) >> 5) + key[3]
0x401477    XOR a2[0x8], a2[0x9]            ; (input[1] + tmp + sum) ^ (((input[1] + tmp) >> 5) + key[3])
0x4015f1    MOV a2[0x9], a2[0xc]            
0x4014d6    SHL a2[0x9], 0x4                ; (input[1] + tmp) << 4
0x401594    ADD a2[0x9], a2[0x6]            ; ((input[1] + tmp) << 4) + key[2]
0x401477    XOR a2[0x8], a2[0x9]            ; (input[1] + tmp + sum) ^ (((input[1] + tmp) >> 5) + key[3]) ^ (((input[1] + tmp) << 4) + key[2])
0x401594    ADD a2[0xb], a2[0x8]            ; input[0] = (input[1] + tmp + sum) ^ (((input[1] + tmp) >> 5) + key[3]) ^ (((input[1] + tmp) << 4) + key[2])
0x401594    ADD a2[0xa], 0x1                ; i
0x401408    CMP a2[0xa], 0x20               ; i < 32
0x401464    REPEAT CURRENT SROP

动调得知a2[0]~a2[3]是input经过rc4加密后的密文。

然后读伪汇编,发现是个魔改的tea。python模拟的加密代码如下,顺便写出对应的解密代码:

def changed_tea_encrypt(input):
    key = [0x79757361, 0x79796473, 0xdeadbeef, 0xaa114514]
    k0, k1, k2, k3 = key
    v0, v1 = input[0], input[1]
    sum = 0

    for i in range(32):
        sum += 0x9e3779b9
        sum &= 0xffffffff

        v1 += (v0 + sum) ^ ((v0 >> 5) + k1) ^ ((v0 << 4) + k0)
        v1 &= 0xffffffff
        v0 += (v1 + sum) ^ ((v1 >> 5) + k3) ^ ((v1 << 4) + k2)
        v0 &= 0xffffffff

    return [v0, v1]

def changed_tea_decrypt(cipher):
    key = [0x79757361, 0x79796473, 0xdeadbeef, 0xaa114514]
    k0, k1, k2, k3 = key
    v0, v1 = cipher[0], cipher[1]
    sum = 0x9e3779b9 * 32
    sum &= 0xffffffff

    for i in range(32):
        v0 -= (v1 + sum) ^ ((v1 >> 5) + k3) ^ ((v1 << 4) + k2)
        v0 &= 0xffffffff
        v1 -= (v0 + sum) ^ ((v0 >> 5) + k1) ^ ((v0 << 4) + k0)
        v1 &= 0xffffffff

        sum -= 0x9e3779b9
        sum &= 0xffffffff

    return [v0, v1]

而原版的tea加密是先v0再v1,如下:Python实现TEA、XTEA、XXTEA加密解密算法 _

def encrypt(v, k):
    v0 = v[0]
    v1 = v[1]
    x = 0
    delta = 0x9E3779B9
    k0 = k[0]
    k1 = k[1]
    k2 = k[2]
    k3 = k[3]
    for i in range(32):
        x += delta
        x = x & 0xFFFFFFFF
        v0 += ((v1 << 4) + k0) ^ (v1 + x) ^ ((v1 >> 5) + k1)
        v0 = v0 & 0xFFFFFFFF
        v1 += ((v0 << 4) + k2) ^ (v0 + x) ^ ((v0 >> 5) + k3)
        v1 = v1 & 0xFFFFFFFF
    v[0] = v0
    v[1] = v1
    return v
def decrypt(v, k):
    v0 = v[0]
    v1 = v[1]
    x = 0xC6EF3720
    delta = 0x9E3779B9
    k0 = k[0]
    k1 = k[1]
    k2 = k[2]
    k3 = k[3]
    for i in range(32):
        v1 -= ((v0 << 4) + k2) ^ (v0 + x) ^ ((v0 >> 5) + k3)
        v1 = v1 & 0xFFFFFFFF
        v0 -= ((v1 << 4) + k0) ^ (v1 + x) ^ ((v1 >> 5) + k1)
        v0 = v0 & 0xFFFFFFFF
        x -= delta
        x = x & 0xFFFFFFFF
    v[0] = v0
    v[1] = v1
    return v

flag脚本

输入的是十六进制字符串,先十六进制字符串转字符串(2个字节变1个字节)。然后rc4加密,最后是魔改的tea加密。

rc4的密钥动调拿到,只有8个字节有点出乎我的意料,学到了。

求flag就逆着回去就行了。

注意rc4解密后,输出的是十六进制字符串哦。

def changed_tea_decrypt(cipher):
    key = [0x79757361, 0x79796473, 0xdeadbeef, 0xaa114514]
    k0, k1, k2, k3 = key
    v0, v1 = cipher[0], cipher[1]
    sum = 0x9e3779b9 * 32
    sum &= 0xffffffff

    for i in range(32):
        v0 -= (v1 + sum) ^ ((v1 >> 5) + k3) ^ ((v1 << 4) + k2)
        v0 &= 0xffffffff
        v1 -= (v0 + sum) ^ ((v0 >> 5) + k1) ^ ((v0 << 4) + k0)
        v1 &= 0xffffffff

        sum -= 0x9e3779b9
        sum &= 0xffffffff

    return [v0, v1]

from Crypto.Cipher import ARC4
from binascii import unhexlify, hexlify
import struct
def rc4_decrypt(cipher, key):
    rc4 = ARC4.new(key)
    return rc4.decrypt(cipher)

cipher = [0x189BE35C, 0x1109831A, 0x3E530874, 0x4B8898EB]
result = changed_tea_decrypt(cipher[:2]) + changed_tea_decrypt(cipher[2:])
print(result)

cipher = struct.pack('IIII', result[0], result[1], result[2], result[3])
rc4_key = unhexlify('DCEA96F323CA9D5E')
print(hexlify(cipher))
result = rc4_decrypt(cipher, rc4_key)
print(hexlify(result))

# a3bd7baf998b95df209d3ab5125d7e06

idapython动调

除了pin插桩之外,也可以参考看雪 2020西湖论剑预选赛flow wp使用idapython脚本下断点,并获取寄存器的值,打印执行流。

脚本

动调起来,在开始打个断点,输入input后,运行此脚本,自动化调试,并打印指令流。

打印效果:

image-20201117185108186

# -*- coding: UTF-8 -*-
print 'start script, current time: %s'%time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 

AddBpt(0x4015F1)
AddBpt(0x401594)
AddBpt(0x401535)
AddBpt(0x401477)
AddBpt(0x4014D6)
AddBpt(0x4013FA)
AddBpt(0x401464)

while True:
        
    RunTo(0x40115E)     # compare_ciphertext 此处函数进行比较加密后的数据和密文是否相等。
    GetDebuggerEvent(WFNE_SUSP, -1)       # wait until the process gets suspended.阻塞至进程挂起(即运行到一个断点)
    
    rip=GetRegValue('rip')
    arg1=GetRegValue('rax')
    arg2=GetRegValue('rdx')
    arg3=GetRegValue('rcx')
    arg4=GetRegValue('rbx')
 
    if rip==0x4015F1:   # mov
        if arg4!=0:
            print '0x%x\tMOV a2[0x%x], a2[0x%x]\n'%(rip, arg1, arg3),
        else:
            print '0x%x\tMOV a2[0x%x], 0x%x\n'%(rip, arg1, arg3),
 
    elif rip==0x401594: # add
        if arg4!=0:
            print '0x%x\tADD a2[0x%x], a2[0x%x]\n'%(rip, arg1, arg3),
        else:
            print '0x%x\tADD a2[0x%x], 0x%x\n'%(rip, arg1, arg3),
 
    elif rip==0x401535: # shr
        if arg4!=0:
            print '0x%x\tSHR a2[0x%x], a2[0x%x]\n'%(rip, arg1, arg3),
        else:
            print '0x%x\tSHR a2[0x%x], 0x%x\n'%(rip, arg1, arg3),
 
    elif rip==0x401477: # xor
        if arg4!=0:
            print '0x%x\tXOR a2[0x%x], a2[0x%x]\n'%(rip, arg1, arg3),
        else:
            print '0x%x\tXOR a2[0x%x], 0x%x\n'%(rip, arg1, arg3),
 
    elif rip==0x4014D6: # shl
        if arg4!=0:
            print '0x%x\tSHL a2[0x%x], a2[0x%x]\n'%(rip, arg1, arg3),
        else:
            print '0x%x\tSHL a2[0x%x], 0x%x\n'%(rip, arg1, arg3),
 
    elif rip==0x4013FA: # cmp
        if arg4!=0:
            print '0x%x\tCMP a2[0x%x], a2[0x%x]\n'%(rip, arg1, arg3),
        else:
            print '0x%x\tCMP a2[0x%x], 0x%x\n'%(rip, arg1, arg3),
 
    elif rip==0x401464: # jmp or not
        if arg2:
            print '0x%x\tREPEAT CURRENT SROP\n\n'%(rip),
        else:
            print '0x%x\tJMP NEXT SROP\n\n'%(rip),
           
print 'end script, current time: %s\n'%time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 

GetDebuggerEvnt的官方解释是wait until the process gets suspended。

结合本脚本实际上的效果,我的理解是,GetDebuggerEvnt阻塞至进程挂起(即运行到一个断点)

不一定是此函数前面紧靠着的RunTo设置的断点,也包括AddBpt设置的。

本脚本就是一直RunTo(0x40115E),然后由于开头设置了很多断点,所以在没有到达比较密文是否正确的0x40115E函数之前,也会多次被GetDebuggerEvent收起阻塞,接着去执行此后的打印指令流的代码。

然后再次循环一次。再次RunTo(0x40115E),再次设置阻塞。

最后会执行到0x40115E后,由于后续不会再执行到0x40115E,所以GetDebuggerEvent阻塞至整个程序运行结束,然后此时异常退出。

以上是我的理解。

摘抄一些相关用法

  • 在动调主要使用到的函数:

AddBpt(long Address): 在指定的地址设置断点

GetRegValue(string Register):获取一个寄存器的名称

SetRegValue(long Value, string Register)设置寄存器的值

RunTo(long Address): 运行到指定的地址,然后停下。

GetDebuggerEvnt(WFNE_SUSP, -1):应该是获取调试某一过程中信息,一般就在RunTo()后和操作寄存器前使用,解决脚本和调试异步而导致的寄存器读取报错的问题。(这里和我理解的不太一样,具体的看上面我的描述吧)

  • 用于程序运行, 获取相关位置,设定相关寄存器。
RunTo(xxxx)
GetDebuggerEvent(WFNE_SUSP, -1)
SetRegValue(xxx, 'xxx')
xxx = GetRegValue("xxx")
  • 获取栈内数据:
RunTo(xxx)
GetDebuggerEvent(WFNE_SUSP, -1)
stack = GetRegValue("esp")

参考

Last modification:December 1st, 2020 at 08:19 pm