Advertisement
Guest User

Untitled

a guest
May 27th, 2016
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.25 KB | None | 0 0
  1. void unpack_file(char* data_in, char* data_out)
  2. {
  3.     __asm {
  4.             mov esi, data_in        //pointer for pack body
  5.             mov edi, data_out       //pointer for unpack body
  6.             cld
  7.             mov dl, 0x80
  8.             loop99: mov al, byte ptr ds : [esi]
  9.             inc esi
  10.             mov byte ptr ds : [edi], al
  11.             inc edi
  12.             loop111 : add dl, dl
  13.             jne loop1
  14.             mov dl, byte ptr ds : [esi]
  15.             inc esi
  16.             adc dl, dl
  17.             loop1 : jae loop99
  18.             add dl, dl
  19.             jne loop2
  20.             mov dl, byte ptr ds : [esi]
  21.             inc esi
  22.             adc dl, dl
  23.             loop2 : jae loop3
  24.             xor eax, eax
  25.             add dl, dl
  26.             jne loop4
  27.             mov dl, byte ptr ds : [esi]
  28.             inc esi
  29.             adc dl, dl
  30.             loop4 : jae loop5
  31.             add dl, dl
  32.             jne loop6
  33.             mov dl, byte ptr ds : [esi]
  34.             inc esi
  35.             adc dl, dl
  36.             loop6 : adc eax, eax
  37.             add dl, dl
  38.             jne loop7
  39.             mov dl, byte ptr ds : [esi]
  40.             inc esi
  41.             adc dl, dl
  42.             loop7 : adc eax, eax
  43.             add dl, dl
  44.             jne loop8
  45.             mov dl, byte ptr ds : [esi]
  46.             inc esi
  47.             adc dl, dl
  48.             loop8 : adc eax, eax
  49.             add dl, dl
  50.             jne loop10
  51.             mov dl, byte ptr ds : [esi]
  52.             inc esi
  53.             adc dl, dl
  54.             loop10 : adc eax, eax
  55.             je loop11
  56.             push edi
  57.             sub edi, eax
  58.             mov al, byte ptr ds : [edi]
  59.             pop edi
  60.             loop11 : mov byte ptr ds : [edi], al
  61.             inc edi
  62.             jmp loop111
  63.             loop3 : mov eax, 1
  64.             loop23 : add dl, dl
  65.             jne loop25
  66.             mov dl, byte ptr ds : [esi]
  67.             inc esi
  68.             adc dl, dl
  69.             loop25 : adc eax, eax
  70.             add dl, dl
  71.             jne loop24
  72.             mov dl, byte ptr ds : [esi]
  73.             inc esi
  74.             adc dl, dl
  75.             loop24 : jb loop23
  76.             sub eax, 2
  77.             jne loop22
  78.             mov ecx, 1
  79.             loop19 : add dl, dl
  80.             jne loop21
  81.             mov dl, byte ptr ds : [esi]
  82.             inc esi
  83.             adc dl, dl
  84.             loop21 : adc ecx, ecx
  85.             add dl, dl
  86.             jne loop20
  87.             mov dl, byte ptr ds : [esi]
  88.             inc esi
  89.             adc dl, dl
  90.             loop20 : jb loop19
  91.             push esi
  92.             mov esi, edi
  93.             sub esi, ebp
  94.             rep movsb
  95.             pop esi
  96.             jmp loop111
  97.             loop22 : dec eax
  98.             shl eax, 8
  99.             mov al, byte ptr ds : [esi]
  100.             inc esi
  101.             mov ebp, eax
  102.             mov ecx, 1
  103.             loop15 : add dl, dl
  104.             jne loop16
  105.             mov dl, byte ptr ds : [esi]
  106.             inc esi
  107.             adc dl, dl
  108.             loop16 : adc ecx, ecx
  109.             add dl, dl
  110.             jne loop17
  111.             mov dl, byte ptr ds : [esi]
  112.             inc esi
  113.             adc dl, dl
  114.             loop17 : jb loop15
  115.             cmp eax, 0x7D00
  116.             jae loop18
  117.             cmp eax, 0x500
  118.             jb loop12
  119.             inc ecx
  120.             push esi
  121.             mov esi, edi
  122.             sub esi, eax
  123.             rep movsb
  124.             pop esi
  125.             jmp loop111
  126.             loop12 : cmp eax, 0x7F
  127.             ja loop13
  128.             loop18 : add ecx, 2
  129.             loop13 : push esi
  130.             mov esi, edi
  131.             sub esi, eax
  132.             rep movsb
  133.             pop esi
  134.             jmp loop111
  135.             loop5 : mov al, byte ptr ds : [esi]
  136.             inc esi
  137.             xor ecx, ecx
  138.             shr al, 1
  139.             je loop14
  140.             adc ecx, 2
  141.             mov ebp, eax
  142.             push esi
  143.             mov esi, edi
  144.             sub esi, eax
  145.             rep movsb
  146.             loop1001 : pop esi
  147.             jmp loop111
  148.             loop14 : sub edi, dword ptr ss : [esp + 28]
  149.             mov dword ptr ss : [esp + 0x1C], edi
  150.     };
  151. }
  152.  
  153. int main(int argc, char** argv)
  154. {
  155.     std::ifstream file(argv[1], std::ios_base::in | std::ios_base::binary);
  156.     if (!file)
  157.         return -1;
  158.    
  159.     file.seekg(0, SEEK_END);
  160.     int size = file.tellg();
  161.     file.seekg(0, SEEK_SET);
  162.    
  163.     char* data = new char[size];
  164.     file.read(&data[0], size);
  165.    
  166.     char* unpacked = new char[0x410];
  167.     unpack_file(data, unpacked);
  168.  
  169.     std::ofstream out("out");
  170.     out.write(unpacked, 0x410);
  171.  
  172.     return 0;
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement