Mở Winhex, Ctrl + N, chọn 1 byte, OK, Ctrl + V, Yes, OK, chọn ASCII Hex, OK : Chọn byte đầu tiên (00), nhấn delete, Yes : Save lại với tên CodeSPTable.bin, Các bác còn nhớ: DS:[00AC9230]=01300000 EAX=00BAB014 Vậy là spliced code được đ ặt tại 01300000, trong dump window, Ctrl + G, 01300000, Bôi trắng toàn bộ, binary => binary copy, vô Winhex paste, save lại với tên CodeSPCode.bin. He`, sắp kết thúc rồi. Bây giờ mở ArmTools: Trong ô đầu tiên link đến file CodeSPTable.bin, trong ô thứ 2 link đến CodeSPCode.bin, trong ô thứ 3 link đến file dumped_.exe. Ấn Parchar. Done. Tóm lại em ko thích cách của bác Tomo này chút nào, trâu bò bỏ xừ. Như em đã nói ở trên còn có 1 cách fix IAT elimination nữa trong tut của bác Tomo, dạo này em hơi bận, ko có điều kiện đọc, bác nào đọc rồi thì hoàn thiện giúp em cái tut này với. Thanks các bác trước nha. Crack ASPR 2.x bằng Hook API Chào mọi người trong box. Mình post lên đây tut crack ASPR 2.x / 2.12 SDK bằng Hook API. Hiện tại vấn đề unpack thằng này đang được thảo luận bên Unpack box, các bạn có thể tham khảo tại http://www.reaonline.net/forum/showthread.php?t=2646 để tìm hiểu về soft này. 1. Giới thiệu về soft: Nó được pack bằng Aspr 2.0 / 2.12 SDK (theo hac nho). Hiện tại unpack thằng này là cả một vấn đề lớn ! Nhưng ta hoàn toàn có thể crack nó bằng hook API mà không cần unpack. - Nguyên tắc hoạt động của soft : trong quá trình upack, nó load code lên một memory được cấp động và chạy luôn check license tại đó, nếu đúng thì unpack tiếp. Quá trình check license bao gồm : + Đọc Hardware ID bằng DeviceIOControl, mã hoá lấy 1 dword , mã hoá thành 13 bytes + Đọc reg key mã hoá lấy $80 bytes + Mã hoá $80 bytes này trong một vòng decode khủng khiếp (link at:http://www.reaonline.net/forum/showthread.php?t=2649) và decode với Hardware ID để lấy $80 cấu hình cho soft run.(xem link trên cùng). Ta đã biết $80 byte này lên hoàn toàn có thể crack nó. 2. Đặt vấn đề crack. - Ta đã biết sau khi load code, soft phải đọc Hardware ID (2 lần) để lấy thông số tại các địa chỉ xác định. Do đây là code được load lên có địa chỉ phần thấp xác định và lúc này đã qua hết các đoạn check Int3 nên ta chọn Hook DeviceIoControl để công việc xử lý là ít nhất ( có thể chọn RegOpen / RegQuery nhưng ta phải "chuốt" code nhiều hơn). - Ta không thể dùng make loader do soft cần vài arg để chạy và quan trọng hơn nó có Anti debug trong khi unpack soft và cả trong dll nữa (cũng bị pack gần như vậy). - Vì vậy tôi chọn hook DeviceIoControl theo các lý do nêu trên. 3. Tạm gọi là kỹ thuật Hook. - Để hook được nó ta viết một dll gọi là Mydll cho dễ gõ(code dll này mô tả sau). Trong dll này có một function AutoLoad(Dllhandle: THandle) : boolen đặc biệt dùng để kiểm tra hook có thành công hay không và lấy Handle của chính Mydll khi được load - dùng để gọi FreeLibrary. Để load Mydll, ta lợi dụng luôn code của soft để load nó vào cùng process để hook cho đơn giản. Bạn để ý nhé, tại 401000 của soft có opcode : push 46xxxx call 46yyyy ret Thực chất đây chỉ tương ứng jmp 46xxxx thôi. Ta lợi dụng luôn hàm Call 46yyyy này để load Mydll. Bạn tìm đoạn byte trống trong code, khoảng $50 và nhét "Mydll", "AutoLoad" và đoạn code sau vào đó : push @"Mydll" //đ/c chuỗi "Mydll" call LoadLibraryA // đ/c hàm này ở trong Import Table. push eax -> cất handle , mình đã bỏ qua đoạn test eax, eax push @"AutoLoad" push eax Call GetProcAddress Call eax -> call autoload (Handle) test eax, eax je _OK push handle of Mydll Call eax -> nếu error, AutoLoad = @FreeLibrary _OK : ret . CodeSPTable.bin, Các bác còn nhớ: DS: [00 AC92 30] = 01 3 00 000 EAX =00 BAB 01 4 Vậy là spliced code được đ ặt tại 01 3 00 000 , trong dump window, Ctrl + G, 01 3 00 000 , Bôi trắng toàn bộ, binary => binary copy,. 1 byte, OK, Ctrl + V, Yes, OK, chọn ASCII Hex, OK : Chọn byte đầu tiên (00 ), nhấn delete, Yes : Save lại với tên CodeSPTable.bin, Các bác còn nhớ: DS: [00 AC92 30] = 01 3 00 000 . dụng luôn code của soft để load nó vào cùng process để hook cho đơn giản. Bạn để ý nhé, tại 4 01 0 00 của soft có opcode : push 46xxxx call 46yyyy ret Thực chất đây chỉ tương ứng jmp 46xxxx