In that direction we put a F2 and we give F9, once for we cleared Breakpoint giving F2 again and once again we put a F2 in the section text of the Mamory Map, we give F9 and for here Tại direction mà chúng ta đã dò xuống vùng code theo lệnh thẩm tra 00604943, chúng ta put F2(tại dòng đánh dấu vàng như trên), rồi F9, sau đó clear Breakpoint mà chúng ta nhấn F2 ở trên, một lần nữa chúng ta nhấn F2 tại section .text trong Memory Map, nhấn F9 thực thi tiếp, chúng ta đến đây: 00514CB5 55 PUSH EBP 00514CB6 8BEC MOV EBP,ESP 00514CB8 6A FF PUSH -1 00514CBA 68 80885700 PUSH uedit32.00578880 00514CBF 68 A0855100 PUSH uedit32.005185A0 00514CC4 64:A1 00000000 MOV EAX,DWORD PTR FS:[0] 00514CCA 50 PUSH EAX 00514CCB 64:8925 00000000 MOV DWORD PTR FS:[0],ESP In the state bar [ 00514CB5 says "Break-on-Access when executing ]" and that is our OEP Trong thanh state dưới Olly [ 00514CB5 says "Break-on-Access when executing “] và đó chính là OEP Once obtained our OEP we pointed it for future references, before closing the Olly we see that information gives the Armadillo us, we give F8 until arriving at the direction Chúng ta hảy ghi nhớ chỉ thị này để dùng nó sau này, trước khi close Olly, chúng ta hảy tìm hiểu một số thông tin của Armadillo, chúng ta nhấn F8 cho đến chỉ thị này: 00514CDB FF15 9019F800 CALL DWORD PTR DS:[F81990] Let us follow it with F7 and it took a to us Chúng ta nhấn tiếp F7 và đến đây: 003BEC4C A1 8CF13E00 MOV EAX,DWORD PTR DS:[3EF18C] 003BEC51 C3 RETN The memory direction can vary, with F8 we arrive until the RETN, if we see EAX = 0A280105, for which do not have much very observant experience or they are not east is the value that gives back to the API kernel32.GetVersion, therefore this is the first call to the IAT, but the memory direction of which is called is [ 00F81990 ], if they see the Memory Map will see that the memory of ours begins in 00400000 and finishes in 007D0000, which means that ours IAT was redirected to a zone of memory outside our feasible one Direction trong memory của bạn có thể khác, nhấn F8 đến RETN, chúng ta thấy EAX = 0A280105, với kinh nghiệm ta nhận thấy chúng là giá trị trả về của hàm API kernel32.GetVersion, vì vậy đây là hàm gọi đầu tiên đến IAT, nhưng memory direction của call lại là [ 00F81990 ], chúng ta nhìn vào Memory Map sẽ thấy memory của chúng ta bắt đầu từ 00400000 và kết thúc tại 007D0000, vì vậy có nghĩa là IAT được redirected đến vùng memory ngòai vùng code thực thi. We will treat that subject but late, first we are going to obtain our IAT with the correct entrances, in the Olly we fence to the direction 00F81990 in the Dump and will see Chúng ta sẽ nghiên cứu chủ đề này sau, trước tiên chúng ta sẽ thu được IAT của chúng ta với các thành phần hợp lệ, trong Olly chúng ta nhảy đến direction 00F81990 trong Dump window và sẽ thấy: (click phải direction 00514CDB, Follow in Dump, Memory address) 00F81970 0C 9B D1 77 56 46 D1 77 .›ÑwVFÑw 00F81978 50 16 0F 77 66 94 D1 77 Pwf”Ñw 00F81980 B4 6A D1 77 B3 7B D1 77 ´jÑw³{Ñw 00F81988 DB 7B D1 77 E0 20 C4 77 Û{Ñwà Äw 00F81990 4C EC 3B 00 5F 3C D1 77 Lì;._<Ñw 00F81998 96 9C D1 77 DC 79 D1 77 –œÑwÜyÑw 00F819A0 D0 2B 00 10 10 A5 00 10 Ð+.¥. 00F819A8 0C 15 F4 77 22 5F D1 77 .ôw"_Ñw 00F819B0 EB E0 3B 00 71 EB D1 77 ëà;.qëÑw As it is possible to be observed are several correct entrances, in the personnel I prefer to put a Breakpoint, Hardware, on write, Dword in a correct entrance, this case we put it in 00F81970 Có thể quan sát thấy các thành phần khác đều correct, một cách tổng quát, tui put 1 Breakpoint, Harware, on write, Dword cho 1 thành phần correct của IAT, trường hợp này tui put bp tại 00F81970 We closed the Olly, we return to load ours app, we hide dbg we give F9 and one will stop several times in which sweepings will be griten Chúng ta close Olly lại và load lại app của chúng ta, chúng ta hide dbg, nhấn F9 và sẽ dừng lại vài lần cho đến khi write vào memory tại 00F81970 như sau: (ở case người dịch là 1 lần) 00F81970 EE FE EE FE EE FE EE FE îþîþîþîþ 00F81978 EE FE EE FE EE FE EE FE îþîþîþîþ (để dump ta click phải vào EDI và dump, hay goto cũng được, vì đang trong hàm API) Let us continue pressing F9 until in the memory direction 00F81970 is written a value that is resembled an entrance of the IAT Chúng ta tiếp tục nhấn F9 (khỏang 21 lần) cho đến khi memory được writen 1 giá trị giống như 1 thành phần của IAT 00F81970 0D F0 AD BA 0D F0 AD BA .ðº.ðº 00F81978 EE FE EE FE EE FE EE FE îþîþîþîþ This and other but is sweepings (lướt qua) 00F81970 FE AE 3B 00 0D F0 AD BA þ®; ðº 00F81978 0D F0 AD BA 0D F0 AD BA .ðº.ðº This I complete is seen well but the other directions of the IAT even have value 0DF0ADBA, so we give another F9 and stops in Ở đây ta thấy được memory có giá trị rất well , các giá trị khác trong IAT cũng đều có giá trị 0DF0ADBA, vì vậy nhấn F9 (khỏang 2 lần) tiếp và dừng lại tại đây: 003D6DE5 8B85 0CC8FFFF MOV EAX,DWORD PTR SS:[EBP-37F4] 003D6DEB 8B8D 60C2FFFF MOV ECX,DWORD PTR SS:[EBP-3DA0] 003D6DF1 8908 MOV DWORD PTR DS:[EAX],ECX 003D6DF3 8B85 0CC8FFFF MOV EAX,DWORD PTR SS:[EBP-37F4] 003D6DF9 83C0 04 ADD EAX,4 003D6DFC 8985 0CC8FFFF MOV DWORD PTR SS:[EBP-37F4],EAX 003D6E02 ^E9 CEFCFFFF JMP 003D6AD5 003D6E07 FF15 80F03D00 CALL DWORD PTR DS:[3DF080] ; kernel32.GetTickCount 00F81970 1E E1 3B 00 CE AD 3B 00 -á;.Î;. 00F81978 07 AE 3B 00 68 58 AA 71 ®;.hXªq If we see the memory direction we see that the entrance is not correct like was it at the moment for putting the Breakpoint Hardware, this is so that the table to the being redirected outside the memory takes advantage of so that this zone of redireccionamiento is variable and potentially different whenever ours is executed app, as it is, if we above see a little the zone of our Breakpoint we see that already there are correct entrances, reason why go by good way, we clear our Breakpoint Hardware and we give F8 until arriving a Chúng ta thấy memory direction của các thành phần ko phải đúng y giống như lúc chúng ta đặt Breakoint Hardware, table được redirect bên ngòai vùng nhớ thực thi thay đổi và khác nhau một cách tiềm tàng bất cứ khi nào ứng dụng chúng ta thực thi, như chúng ta đã thấy nó như vừa rồi.nếu chúng ta nhìn lên trên trong win Dump chúng ta sẽ thấy các thành phần đều correct, chúng ta đã đi đúng hướng rồi các bạn, bây giờ clear Breakpoint Hardware và nhấn F8 đến đây: 003D6C00 FFB5 78C8FFFF PUSH DWORD PTR SS:[EBP-3788] 003D6C06 FF15 ECF23D00 CALL DWORD PTR DS:[3DF2EC] ; msvcrt.strchr 003D6C0C 59 POP ECX 003D6C0D 59 POP ECX 003D6C0E 40 INC EAX 003D6C0F 8985 78C8FFFF MOV DWORD PTR SS:[EBP-3788],EAX 003D6C15 83BD 94C4FFFF 00 CMP DWORD PTR SS:[EBP-3B6C],0 003D6C1C 74 71 JE SHORT 003D6C8F 003D6C1E 8B85 94C4FFFF MOV EAX,DWORD PTR SS:[EBP-3B6C] 003D6C24 8985 54C2FFFF MOV DWORD PTR SS:[EBP-3DAC],EAX 003D6C2A EB 0F JMP SHORT 003D6C3B 003D6C2C 8B85 54C2FFFF MOV EAX,DWORD PTR SS:[EBP-3DAC] 003D6C32 83C0 0C ADD EAX,0C 003D6C35 8985 54C2FFFF MOV DWORD PTR SS:[EBP-3DAC],EAX 003D6C3B 8B85 54C2FFFF MOV EAX,DWORD PTR SS:[EBP-3DAC] 003D6C41 8378 08 00 CMP DWORD PTR DS:[EAX+8],0 003D6C45 74 48 JE SHORT 003D6C8F 003D6C47 68 00010000 PUSH 100 003D6C4C 8D85 54C1FFFF LEA EAX,DWORD PTR SS:[EBP-3EAC] 003D6C52 50 PUSH EAX 003D6C53 8B85 54C2FFFF MOV EAX,DWORD PTR SS:[EBP-3DAC] 003D6C59 FF30 PUSH DWORD PTR DS:[EAX] 003D6C5B E8 8B14FEFF CALL 003B80EB 003D6C60 83C4 0C ADD ESP,0C 003D6C63 8D85 54C1FFFF LEA EAX,DWORD PTR SS:[EBP-3EAC] 003D6C69 50 PUSH EAX 003D6C6A FFB5 5CC2FFFF PUSH DWORD PTR SS:[EBP-3DA4] 003D6C70 FF15 58F33D00 CALL DWORD PTR DS:[3DF358] ; msvcrt._stricmp 003D6C76 59 POP ECX This zone is a standard of the Armadillo and it says us that we are closely together of Magical Salto that repaired the IAT, I stood out both indicating main of the zone, if the jump of direction 003D6C45 is followed took a to us Vùng này là vùng standard của Armadillo và nó nói cho chúng ta biết vị trí của cặp lệnh jump gọi là Magical Jumps, dùng để sửa chửa IAT, Tôi đang đứng ở giữa vùng chính của cặp lệnh jump Magical, nếu chúng ta theo code của direction 003D6C45(ko thực thi), chúng ta sẽ đến : . đây: 00 514 CB5 55 PUSH EBP 00 514 CB6 8BEC MOV EBP,ESP 00 514 CB8 6A FF PUSH -1 00 514 CBA 68 808 85 700 PUSH uedit32 .00 5788 80 00 514 CBF 68 A085 5 10 0 PUSH uedit32 .00 518 5A0 00 514 CC4 64:A1 00 000 000 MOV. 00 F 819 80 B4 6A D1 77 B3 7B D1 77 ´jÑw³{Ñw 00 F 819 88 DB 7B D1 77 E0 20 C4 77 Û{Ñwà Äw 00 F 819 90 4C EC 3B 00 5F 3C D1 77 Lì;._<Ñw 00 F 819 98 96 9C D1 77 DC 79 D1 77 –œÑwÜyÑw 00 F 819 A0 D0 2B 00 . SS:[EBP-3DAC] 00 3D6C 41 8378 08 00 CMP DWORD PTR DS:[EAX+8] ,0 00 3D6C45 74 48 JE SHORT 00 3D6C8F 00 3D6C47 68 00 01 0 00 0 PUSH 10 0 00 3D6C4C 8D85 54C1FFFF LEA EAX,DWORD PTR SS:[EBP-3EAC] 00 3D6C52 50 PUSH