Lương&Ánh&Hoàng&
hoangla@soict.hut.edu.vn&
Chương&7.&AntixTampering&
&
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&(AntitDebugger)&
7.6&Selftmodifying&code&
7.7&Giải&pháp&tổng&thể&
&
Nội&dung&
119&
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ụ:&
&&&
7.1&Phát&hiện&thay&đổi&mã&lệnh&
120&
//&Khai&báo&xâu&đánh&dấu&mã&bă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);&
Ví&dụ:&
&&&
7.1&Phát&hiện&thay&đổi&mã&lệnh&
121&
pFile&=&(unsigned&char*)malloc(len);&
fseek(fp,0,SEEK_SET);&
fread(pFile,1,len,fp);&
md5hash&=&0;&
for&(int&i=0;i<lent20;i++) &//&Dò&tìm&giá&trị&băm&trong&}ile&
&if&((pFile[i]=='A')&&(pFile[i+1]=='A')&& & &&
&(pFile[i+2]=='A')&&(pFile[i+3]=='A'))&
&{&
&memcpy(expectedhash,pFile+i+4,16); &//&Lưu&ra&mảng&khác&
&memset(pFile+i+4,0,16); & &//&Xóa&trắng&giá&trị&này&trong&}ile&
&}&
MD5(pFile,len,hash); &&&&//&Tính&lại&giá&trị&băm&&
&printf("File&hash:");&
&print_md5(hash); & &&&&&
&printf("Expected&hash:");&
&print_md5(expectedhash);&
&if&(memcmp(hash,expectedhash,16))&
&{&
&&printf("File&veri}ication&failed");&
&}&
&getch();&
&return&0;&
}&
Hạn&chế&
Dễ&bị&đánh&bại&nếu&sử&dụng&hash&vì&cracker&cũng&có&thể&tính&lại&giá&trị&băm&và&sửa&}ile&
cho&chính&xác.&
Nếu&sử&dụng&HMAC&thì&phải&lưu&mật&khẩu&ở&đâu&đó&
Lưu&trong&}ile:&Cũng&sẽ&bị&cracker&dò&ra&
Lưu&trên&internet:&cần&có&kết&nối&internet&và&dễ&dàng&bị&dò&ra&nếu&dùng&sniffer.&
CURL&
&&&
7.1&Phát&hiện&thay&đổi&mã&lệnh&
122&