|
// get origin address. |
|
// 08077008 E81C060000 call dword 0x8077629 |
|
// 0807700D 83EE05 sub esi,byte +0x5 // esi - 5: 0x8077008 |
|
origin = (void *)0x8077008; |
|
|
|
int sub_08077010() |
|
{ |
|
ebp_c04h = sub_080775B2(origin, 0x621); |
|
if(getuid() != 0) { |
|
sub_08077259(origin+0x628, ebp_c04h); |
|
exit(EXIT_FAILURE); |
|
} |
|
sub_08077259(origin+0x9bd, 0x27a, ebp_c04h); |
|
reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART, NULL); |
|
|
|
// main routine. |
|
area = mmap(1<<0xc, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANONYMOUS|MAP_PRIVATE, NULL, NULL); |
|
len = read(STDIN_FILENO, area, 0x1000); |
|
area[len-1] = '\0'; |
|
sub_0807723C(ebp_c00h, '\0', 0x400); |
|
sub_0807723C(ebp_400h, '\0', 0x400); |
|
// ebp_800h is dest. origin+0x1633 is src. |
|
sub_080775F6(ebp_800h, 0x400, origin+0x1633, 0x3b6, ebp_c04h); // decrypt |
|
// arg0: input buffer, arg1: input buffer size, |
|
// arg2: loop buffer, arg3: loop buffer size, |
|
// arg4: output buffer, arg5: output buffer size |
|
sub_0807730A(ebp_400h, 0x400, ebp_800h, 0x400, ebp_c00h, 0x400); // brainfuck. |
|
sub_080771DB(ebp_c00h, area); |
|
|
|
if(sub_0807719E(ebp_c00h, area) != 0) { |
|
sub_08077259(origin+0xc37, 0x552, ebp_c04h); |
|
return 1; |
|
} |
|
sub_08077259(origin+0x1189, 0x4aa, ebp_c04h); |
|
return 0; |
|
} |
|
|
|
int sub_0807719E(int arg0, char arg1) |
|
{ |
|
int i; |
|
char a, b; |
|
for(i = 0; (a = (arg0[i] != '\0')) && (b = (arg1[i] != '\0')) && !(a-b); i++) { |
|
} |
|
return a - b; // have to be zero. |
|
} |
|
|
|
int sub_080771DB(char *arg0, char *arg1) |
|
{ |
|
int i; |
|
char a, b; |
|
for(i = 0; (a = (arg0[i] != '\0')) && (b = (arg1[i] != '\0')) && !(a-b); i++) { |
|
} |
|
return a - b; // have to be zero. |
|
} |
|
|
|
|
|
size_t sub_08077206(int *arg0) |
|
{ |
|
int i; |
|
for(i = 0; arg0[i] != '\0'; i++) { |
|
} |
|
return i; |
|
} |
|
|
|
size_t sub_08077221(char *arg0) |
|
{ |
|
int i; |
|
for(i = 0; arg0[i] != '\0'; i++) { |
|
} |
|
return i; |
|
} |
|
|
|
void sub_0807723C(char *arg0, int arg1, int arg2) |
|
{ |
|
for(i = 0; i < arg2; i++) { |
|
arg1[i] = arg1; |
|
} |
|
} |
|
|
|
void sub_08077259(arg0, arg1, arg2) |
|
{ |
|
sub_0807723C(ebp_d00h, '\0', 0x100); |
|
sub_0807723C(ebp_400h, '\0', 0x400); |
|
sub_080775F6(ebp_c00h, 0x800, arg0, arg1, arg2); |
|
sub_0807730A(ebp_400h, 0x400, ebp_c00h, 0x800, ebp_d00h, 0x100); |
|
sub_08077221(ebp_d00h); |
|
write(STDOUT_FILENO, ebp_d00h, sub_08077206(ebp_d00h)); |
|
} |
|
|
|
// arg0: input buffer, arg1: input buffer size, |
|
// arg2: loop buffer, arg3: loop buffer size, |
|
// arg4: output buffer, arg5: output buffer size |
|
int sub_0807730A(char *arg0, int arg1, char *arg2, int arg3, char *arg4, int arg5) |
|
{ |
|
// Local variables. |
|
int ebp_810h; // |
|
int ebp_80ch; // stack pointer. |
|
int ebp_808h; // for loop. |
|
int ebp_804h; // loop [] |
|
char *ebp_800h[0x800]; |
|
|
|
sub_0807723C(ebp_800h, '\0', 0x800); |
|
ebp_804h = 0; |
|
ebp_808h = 0; |
|
ebp_80ch = 0; |
|
ebp_810h = 0; |
|
for(ebp_808h = 0; ebp_808h < ebp_14h; ebp_808h) { |
|
switch(arg2[ebp_808h]) { |
|
case '\0': |
|
return 0; |
|
case '<': |
|
if(ebp_80ch <= 0) ebp_80ch--; |
|
break; |
|
case '>': |
|
if(ebp_80ch <= arg1) ebp_80ch++; |
|
break; |
|
case '-': |
|
if(0 <= ebp_80ch && ebp_80ch <= arg1) arg0[ebp_80ch]--; |
|
break; |
|
case '+': |
|
if(0 <= ebp_80ch && ebp_80ch <= arg1) arg0[ebp_80ch]++; |
|
break; |
|
case '[': |
|
// GEKI-mendokusai dot JP; |
|
break; |
|
case ']': |
|
// GEKI-mendokusai dot JP; |
|
break; |
|
case '.': |
|
if(0 <= ebp_80ch && ebp_80ch <= arg1 && 0 <= ebp_810h && ebp_810h <= arg5){ |
|
arg4[arg_810h] = arg0[ebp_80ch]; |
|
ebp_810h++; |
|
} |
|
break; |
|
case ',': |
|
write(STDOUT_FILENO, origin+0x19ff, 0x2dd); |
|
deafult: |
|
} |
|
} |
|
return 0; |
|
} |
|
|
|
// Manipulation Detaction. |
|
int sub_080775B2(arg0, arg1) |
|
{ |
|
// Local variables. |
|
int ebp_08h; |
|
int ebp_04h; |
|
|
|
ebp_04h = 0x1505; |
|
for(ebp_08h = 0; ebp_08h < arg1; ebp_08h++) { |
|
ebp_04h = arg0[ebp_08h] + ebp_04h + (ebp_04h << 5); |
|
} |
|
return ebp_04h; |
|
} |
|
|
|
|
|
int sub_080775F6(arg0, arg1, arg2, arg3, arg4) |
|
{ |
|
int i; |
|
int c; |
|
|
|
c = arg4; |
|
for(i = 0; i < arg3 && i < arg1; i++, ROT(c)) { // ROT means instruction 'rol'. |
|
arg0[i] = arg2[i] ^ c; |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
// restore eip to esi. |
|
// 08077629 5E pop esi |
|
// 0807762A E9DEF9FFFF jmp dword 0x807700d |
|
|
|
// -------------------------- data --------------------------------- |
|
/* |
|
0807762F 00E7 add bh,ah |
|
08077631 99 cdq |
|
08077632 4F dec edi |
|
08077633 E3BA jecxz 0x80775ef |
|
08077635 086CA434 or [esp+0x34],ch |
|
08077639 6443 fs inc ebx |
|
0807763B D5D7 aad 0xd7 |
|
0807763D D3DB rcr ebx,cl |
|
0807763F CAE8AC retf 0xace8 |
|
08077642 2435 and al,0x35 |
|
08077644 0254AFD8 add dl,[edi+ebp*4-0x28] |
|
08077648 E2B8 loop 0x8077602 |
|
0807764A 0C65 or al,0x65 |
|
0807764C B610 mov dh,0x10 |
|
0807764E 48 dec eax |
|
0807764F D2 db 0xd2 |
|
08077650 F299 repne cdq |
|
08077652 4F dec edi |
|
08077653 E3BA jecxz 0x807760f |
|
08077655 086CA444 or [esp+0x44],ch |
|
08077659 0354D5D7 add edx,[ebp+edx*8-0x29] |
|
0807765D D3DB rcr ebx,cl |
|
0807765F CAE8AC retf 0xace8 |
|
08077662 2435 and al,0x35 |
|
08077664 17 pop ss |
|
08077665 52 push edx |
|
08077666 CC int3 |
|
08077667 C9 leave |
|
08077668 94 xchg eax,esp |
|
08077669 AF scasd |
|
0807766A 0C65 or al,0x65 |
|
0807766C B610 mov dh,0x10 |
|
0807766E 5D pop ebp |
|
0807766F D2E7 shl bh,cl |
|
08077671 99 cdq |
|
08077672 4F dec edi |
|
08077673 E3BA jecxz 0x807762f |
|
08077675 086CA434 or [esp+0x34],ch |
|
08077679 6443 fs inc ebx |
|
0807767B D5D7 aad 0xd7 |
|
0807767D D3DB rcr ebx,cl |
|
0807767F CAE8AC retf 0xace8 |
|
08077682 2435 and al,0x35 |
|
08077684 17 pop ss |
|
08077685 52 push edx |
|
08077686 D9 db 0xd9 |
|
08077687 DA db 0xda |
|
08077688 E4CE in al,0xce |
|
0807768A 1B65B6 sbb esp,[ebp-0x4a] |
|
0807768D 105DC7 adc [ebp-0x39],bl |
|
08077690 E78C out 0x8c,eax |
|
08077692 4F dec edi |
|
08077693 E3BA jecxz 0x807764f |
|
08077695 086CA434 or [esp+0x34],ch |
|
08077699 1424 adc al,0x24 |
|
0807769B C2D7D3 ret 0xd3d7 |
|
0807769E DBCA fcmovne st2 |
|
080776A0 E8AC243517 call dword 0x1f3c9b51 |
|
080776A5 52 push edx |
|
080776A6 D9CF fxch st7 |
|
080776A8 F7BE7A72B610 idiv dword [esi+0x10b6727a] |
|
080776AE 5D pop ebp |
|
080776AF C7 db 0xc7 |
|
080776B0 E78C out 0x8c,eax |
|
080776B2 4F dec edi |
|
080776B3 E3BA jecxz 0x807766f |
|
080776B5 081CB3 or [ebx+esi*4],bl |
|
080776B8 3414 xor al,0x14 |
|
080776BA 54 push esp |
|
080776BB D5D7 aad 0xd7 |
|
080776BD D3DB rcr ebx,cl |
|
080776BF CAFDAA retf 0xaafd |
|
080776C2 52 push edx |
|
080776C3 2017 and [edi],dl |
|
080776C5 52 push edx |
|
080776C6 D9CF fxch st7 |
|
080776C8 E2B8 loop 0x8077682 |
|
080776CA 0C65 or al,0x65 |
|
080776CC C6075D mov byte [edi],0x5d |
|
080776CF C7 db 0xc7 |
|
080776D0 F299 repne cdq |
|
080776D2 4F dec edi |
|
080776D3 E3BA jecxz 0x807768f |
|
080776D5 086CA434 or [esp+0x34],ch |
|
080776D9 1454 adc al,0x54 |
|
080776DB D5C2 aad 0xc2 |
|
080776DD D5AD aad 0xad |
|
080776DF DDE8 fucomp st0 |
|
080776E1 AC lodsb |
|
080776E2 2420 and al,0x20 |
|
080776E4 0252D9 add dl,[edx-0x27] |
|
080776E7 CF iretd |
|
080776E8 E2B8 loop 0x80776a2 |
|
080776EA 0C65 or al,0x65 |
|
080776EC B660 mov dh,0x60 |
|
080776EE 4A dec edx |
|
080776EF C7 db 0xc7 |
|
080776F0 F299 repne cdq |
|
080776F2 4F dec edi |
|
080776F3 E3BA jecxz 0x80776af |
|
080776F5 086CA434 or [esp+0x34],ch |
|
080776F9 1454 adc al,0x54 |
|
080776FB D5D7 aad 0xd7 |
|
080776FD C6 db 0xc6 |
|
080776FE DDBCFFAC243517 fnstsw [edi+edi*8+0x173524ac] |
|
08077705 52 push edx |
|
08077706 CC int3 |
|
08077707 DA db 0xda |
|
08077708 E2B8 loop 0x80776c2 |
|
0807770A 0C65 or al,0x65 |
|
0807770C B610 mov dh,0x10 |
|
0807770E 5D pop ebp |
|
0807770F C7828E4FE3BA086C mov dword [edx-0x451cb072],0x34a46c08 |
|
-A434 |
|
08077719 1454 adc al,0x54 |
|
0807771B D5D7 aad 0xd7 |
|
0807771D D3DB rcr ebx,cl |
|
0807771F CAFDAA retf 0xaafd |
|
08077722 52 push edx |
|
08077723 2017 and [edi],dl |
|
08077725 52 push edx |
|
08077726 D9CF fxch st7 |
|
08077728 E2B8 loop 0x80776e2 |
|
0807772A 0C65 or al,0x65 |
|
0807772C C6075D mov byte [edi],0x5d |
|
0807772F C7 db 0xc7 |
|
08077730 F299 repne cdq |
|
08077732 4F dec edi |
|
08077733 E3BA jecxz 0x80776ef |
|
08077735 086CA434 or [esp+0x34],ch |
|
08077739 1441 adc al,0x41 |
|
0807773B D3A1C4DBCAE8 shl dword [ecx-0x1735243c],cl |
|
08077741 AC lodsb |
|
08077742 2420 and al,0x20 |
|
08077744 0252D9 add dl,[edx-0x27] |
|
08077747 CF iretd |
|
08077748 E2B8 loop 0x8077702 |
|
0807774A 0C65 or al,0x65 |
|
0807774C B660 mov dh,0x60 |
|
0807774E 4A dec edx |
|
0807774F C7 db 0xc7 |
|
08077750 F299 repne cdq |
|
08077752 4F dec edi |
|
08077753 E3BA jecxz 0x807770f |
|
08077755 086CA434 or [esp+0x34],ch |
|
08077759 1454 adc al,0x54 |
|
0807775B D5D7 aad 0xd7 |
|
0807775D C6 db 0xc6 |
|
0807775E DDBCFFAC242002 fnstsw [edi+edi*8+0x22024ac] |
|
08077765 52 push edx |
|
08077766 D9CF fxch st7 |
|
08077768 E2B8 loop 0x8077722 |
|
0807776A 0C65 or al,0x65 |
|
0807776C B660 mov dh,0x60 |
|
0807776E 4A dec edx |
|
0807776F C7 db 0xc7 |
|
08077770 F299 repne cdq |
|
08077772 4F dec edi |
|
08077773 E3BA jecxz 0x807772f |
|
08077775 086CA434 or [esp+0x34],ch |
|
08077779 1454 adc al,0x54 |
|
0807777B C0D1A5 rcl cl,byte 0xa5 |
|
0807777E CC int3 |
|
0807777F CAE8AC retf 0xace8 |
|
08077782 3120 xor [eax],esp |
|
08077784 17 pop ss |
|
08077785 52 push edx |
|
08077786 D9CF fxch st7 |
|
08077788 E2B8 loop 0x8077742 |
|
0807778A 0C65 or al,0x65 |
|
0807778C C6075D mov byte [edi],0x5d |
|
0807778F C7 db 0xc7 |
|
08077790 F299 repne cdq |
|
08077792 4F dec edi |
|
08077793 E3BA jecxz 0x807774f |
|
08077795 086CA434 or [esp+0x34],ch |
|
08077799 1454 adc al,0x54 |
|
0807779B C0D1A5 rcl cl,byte 0xa5 |
|
0807779E CC int3 |
|
0807779F CAE8AC retf 0xace8 |
|
080777A2 2435 and al,0x35 |
|
080777A4 17 pop ss |
|
080777A5 52 push edx |
|
080777A6 CC int3 |
|
080777A7 DA db 0xda |
|
080777A8 E2B8 loop 0x8077762 |
|
080777AA 0C65 or al,0x65 |
|
080777AC B610 mov dh,0x10 |
|
080777AE 5D pop ebp |
|
080777AF C7828E4FE3BA086C mov dword [edx-0x451cb072],0x34a46c08 |
|
-A434 |
|
080777B9 1454 adc al,0x54 |
|
080777BB D5D7 aad 0xd7 |
|
080777BD D3DB rcr ebx,cl |
|
080777BF CAFDAA retf 0xaafd |
|
080777C2 52 push edx |
|
080777C3 2217 and dl,[edi] |
|
080777C5 52 push edx |
|
080777C6 D9CF fxch st7 |
|
080777C8 E2B8 loop 0x8077782 |
|
080777CA 0C70 or al,0x70 |
|
080777CC A3105DC7F2 mov [0xf2c75d10],eax |
|
080777D1 E958E3BA08 jmp dword 0x10c25b2e |
|
080777D6 6C insb |
|
080777D7 A4 movsb |
|
080777D8 3414 xor al,0x14 |
|
080777DA 54 push esp |
|
080777DB C0D1A5 rcl cl,byte 0xa5 |
|
080777DE CE into |
|
080777DF CAE8AC retf 0xace8 |
|
080777E2 2435 and al,0x35 |
|
080777E4 17 pop ss |
|
080777E5 52 push edx |
|
080777E6 D9BFF5B80C65 fnstcw [edi+0x650cb8f5] |
|
080777EC B610 mov dh,0x10 |
|
080777EE 5D pop ebp |
|
080777EF C7 db 0xc7 |
|
080777F0 F299 repne cdq |
|
080777F2 4F dec edi |
|
080777F3 E3BA jecxz 0x80777af |
|
080777F5 086CB132 or [ecx+esi*4+0x32],ch |
|
080777F9 6241D5D7D3DB vpsrlq xmm11{k7}{z},xmm21,xmm11 |
|
080777FF CAE8AC retf 0xace8 |
|
08077802 2445 and al,0x45 |
|
08077804 0052D9 add [edx-0x27],dl |
|
08077807 CF iretd |
|
08077808 E2B8 loop 0x80777c2 |
|
0807780A 0C65 or al,0x65 |
|
0807780C B610 mov dh,0x10 |
|
0807780E 5D pop ebp |
|
0807780F C7 db 0xc7 |
|
08077810 F299 repne cdq |
|
08077812 5A pop edx |
|
08077813 E5CC in eax,0xcc |
|
08077815 1F pop ds |
|
08077816 6C insb |
|
08077817 A4 movsb |
|
08077818 3414 xor al,0x14 |
|
0807781A 54 push esp |
|
0807781B D5D7 aad 0xd7 |
|
0807781D C6 db 0xc6 |
|
0807781E CE into |
|
0807781F CAE8AC retf 0xace8 |
|
08077822 2435 and al,0x35 |
|
08077824 17 pop ss |
|
08077825 52 push edx |
|
08077826 D9BFF5B80C65 fnstcw [edi+0x650cb8f5] |
|
0807782C B610 mov dh,0x10 |
|
0807782E 5D pop ebp |
|
0807782F C7 db 0xc7 |
|
08077830 F299 repne cdq |
|
08077832 4F dec edi |
|
08077833 E3BA jecxz 0x80777ef |
|
08077835 086CB132 or [ecx+esi*4+0x32],ch |
|
08077839 62 db 0x62 |
|
0807783A 43 inc ebx |
|
0807783B D5D7 aad 0xd7 |
|
0807783D D3DB rcr ebx,cl |
|
0807783F CAE8AC retf 0xace8 |
|
08077842 3120 xor [eax],esp |
|
08077844 17 pop ss |
|
08077845 52 push edx |
|
08077846 D9CF fxch st7 |
|
08077848 E2B8 loop 0x8077802 |
|
0807784A 0C65 or al,0x65 |
|
0807784C C6075D mov byte [edi],0x5d |
|
0807784F C7 db 0xc7 |
|
08077850 F299 repne cdq |
|
08077852 4F dec edi |
|
08077853 E3BA jecxz 0x807780f |
|
08077855 086CA434 or [esp+0x34],ch |
|
08077859 1441 adc al,0x41 |
|
0807785B D3A1C4DBCAE8 shl dword [ecx-0x1735243c],cl |
|
08077861 AC lodsb |
|
08077862 2420 and al,0x20 |
|
08077864 0252D9 add dl,[edx-0x27] |
|
08077867 CF iretd |
|
08077868 E2B8 loop 0x8077822 |
|
0807786A 0C65 or al,0x65 |
|
0807786C B660 mov dh,0x60 |
|
0807786E 4A dec edx |
|
0807786F C7 db 0xc7 |
|
08077870 F299 repne cdq |
|
08077872 4F dec edi |
|
08077873 E3BA jecxz 0x807782f |
|
08077875 086CA434 or [esp+0x34],ch |
|
08077879 1454 adc al,0x54 |
|
0807787B D5D7 aad 0xd7 |
|
0807787D C6 db 0xc6 |
|
0807787E DDBCFFAC242002 fnstsw [edi+edi*8+0x22024ac] |
|
08077885 52 push edx |
|
08077886 D9CF fxch st7 |
|
08077888 E2C8 loop 0x8077852 |
|
0807788A 1B65B6 sbb esp,[ebp-0x4a] |
|
0807788D 105DC7 adc [ebp-0x39],bl |
|
08077890 F299 repne cdq |
|
08077892 4F dec edi |
|
08077893 F6BC7E7BA42101 idiv byte [esi+edi*2+0x121a47b] |
|
0807789A 54 push esp |
|
0807789B D5D7 aad 0xd7 |
|
0807789D D3ABDDE8AC24 shr dword [ebx+0x24ace8dd],cl |
|
080778A3 351752D9CF xor eax,0xcfd95217 |
|
080778A8 F7BE7A72B605 |