这题真的是学到了不少。
知识点:pin插桩、idapython动调脚本、基于srop的控制流、rc4、魔改tea
大体分析
main函数是假的。
输入后,第10行先把十六进制字符串转换成字符串(2byte->1Byte)。
第14行的函数存在栈溢出,控制流跳走。
之后就是通过srop来实现控制流。
srop简单来说,就是把当前的状态(寄存器,返回地址等值)存入栈内,转入内核处理,然后跳转至栈内之前存的当前状态中的返回地址处继续执行。
动调跟了下,发现40B188处的值为4011E0,所以跳转到4011E0处执行。然后执行完这个函数后,srop至40AFE8处存储的4015F1处继续执行。
发现每次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的东西。有六七条指令。举个例子:
用pin插桩来记录下指令流。
pin
脚本
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的脚本
然后将你写的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$
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后,运行此脚本,自动化调试,并打印指令流。
打印效果:
# -*- 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")