Bài giảng Lập trình an toàn - Chương 7: Anti-Tampering trình bày các nội dung: Phát hiện thay đổi (Detecting modification), che giấu mã (Code hiding), sử dụng con trỏ hàm (Function Pointer), giấu xâu (String hiding), phát hiện debugger (Anti-Debugger) Self-modifying code, giải pháp tổng thể. Mời các bạn cùng tham khảo nội dung chi tiết.
Chương 7 Anti-‐Tampering Lương Ánh Hoàng hoangla@soict.hut.edu.vn Nội dung 7.1 Phát hiện thay đổi (Detecting modi}ication) 7.2 Che giấu mã (Code hiding) 7.3 Sử dụng con trỏ hàm (Function Pointer) 7.4 Giấu xâu (String hiding) 7.5 Phát hiện debugger (Anti-‐Debugger) 7.6 Self-‐modifying code 7.7 Giải pháp tổng thể 119 7.1 Phát hiện thay đổi mã lệnh • Mục tiêu: Phát hiện chương trình đã bị crack chưa (Detecting modi}ication) • Kỹ thuật: – Tính MD5, SHA1, hoặc HMAC mã lệnh của }ile thực thi – Đánh dấu một đoạn trong chương trình sẽ dùng để lưu mã băm }ile thực thi và ghi giá trị băm vào đó bằng một chương trình Hex edit khác – Tại thời điểm runtime tính lại giá trị băm của }ile thực thi và so sánh với mã băm trước đó • Ví dụ: băm // Khai báo xâu đánh dấu m ã char * md5hash = "AAAAXXXXXXXXXXXXXXXX"; int _tmain(int argc, _TCHAR* argv[]) { unsigned char hash[16];// Giá trị băm tính được unsigned char expectedhash[16];// Giá trị băm lưu trong }ile FILE * fp = fopen(argv[0],"rb");// Mở }ile để tính lại giá trị băm unsigned char * pFile ; fseek(fp,0,SEEK_END); int len = ftell(fp); 120 7.1 Phát hiện thay đổi mã lệnh • Ví dụ: char*)malloc(len); pFile = (unsigned fseek(fp,0,SEEK_SET); fread(pFile,1,len,fp); md5hash = 0; for (int i=0;i