Archive for April, 2009


REVERSING GENERALS – PART 3
Dịch : Benina

TỔNG QUAN VỀ ĐẢO MÃ – PHẦN 3

Case

Đây cũng là đọan code trong Opera 3.62. Nó chọn lựa những trang help nào hiển thị trong browser. Tôi lướt qua đọan code này một cách ngẫu nhiên, nhưng nó là một ví dụ hữu ích cho lệnh switch/case. Trước khi bạn tìm hiểu về nó, tôi muốn bạn chú ý rằng , có
2 cách khác nhau trong phát biểu switch. Một là viết ra 1 chuổi các lệnh nhảy jump. Điều này tương đương với “if then sldif elseif ….end” và Một nữa là lọai mà Opera 3.62 sử dụng ở đây. Nó nhanh hơn lọai đã đề cập trước đó (lọai “if then sldif elseif ….end”). Ở
đây, chương trình tính tóan một một “điểm nhảy”(jumpmark) [4*eax+004932A3] đến code tương đương, thay vì đi qua mọi dòng line để check lệnh jump như lọai đầu tiên. Đây đơn giản chỉ là cách làm việc của code, bởi code có chiều dài giống nhau cho mọi
nhánh – 4 byte. Thông thường đây ko phải là case, vì bạn phải đề cập một chuổi các phát biểu “cmp jne” mà chúng tham chiếu đến lọai “if then elsif elsif elsif…end”. Bây giờ hảy xem đọan code sau:

:00493070 mov eax, dword ptr [ebp+10]; eax = Par1
:00493073 add eax, FFFFB1DD
; Par1 = Par1 – 20003d “look at stringrefs”
:00493078 cmp eax, 0000008A
; if eax smaller than 138d jump toindex.html
:0049307D ja 0049305E
:0049307F movzx eax, byte ptr [eax+00493357]
:00493086 jmp dword ptr [4*eax+004932A3]
; switch statement, calculate jumpmark

* Data Obj ->”keys.htm”
|
:0049308D push 0051DD58 ; a jumpmark
:00493092 jmp 00493063

* Data Obj ->”prefmenu.htm#print”
|
:00493094 push 005256B0 ; another jumpmark
:00493099 jmp 00493063

* Data Obj ->”dialogs.htm#direct”
|
:0049309B push 0052569C ; …
:004930A0 jmp 00493063

* Data Obj ->”prefmenu.htm#sethome”
|
:004930A2 push 00525684
:004930A7 jmp 00493063

* Data Obj ->”dialogs.htm#fileuplf”
|
:004930A9 push 0052566C
:004930AE jmp 00493063

* Data Obj ->”dialogs.htm#hotlist”
|
:004930B0 push 00525658
:004930B5 jmp 00493063

* Data Obj ->”dialogs.htm#locked”
|
:004930B7 push 00525644
:004930BC jmp 00493063
; and so on …


Các biến Global :

Trong phần lớn các chương trình có nhiều biến và hằng số mà chúng có khả năng truy xuất mọi lúc, mọi nơi. Đây ko phải là biến local, bởi chúng bị lọai bỏ sau khi hàm kết thúc. Vì vậy chúng (biến loacal) chỉ có thể truy xuất bới chính hàm của chúng. Các biến
có thể được truy xuất đến mọi lúc, mọi nơi được gọi là các biến global (biến tòan cục) (trái với local). Vì vậy một reverser sẽ phải chú ý “theo dõi” chúng, bởi chúng chứa các cờ flags giống như registrationflags (cờ cho biết soft đăng ký chưa), demoflags (cờ xác
định soft có phải là lọai demo hay FULL), trialdate (cờ xác định cho dùng thử, giới hạn tgian ) , …và các dữ liệu khác như tên chương trình, các tham số, …..Xác định các biến global có thể là một công việc khó. Tôi đã tìm hiểu có 2 cách Opera truy xuất các biến của nó. Một là dùng addr trực tiếp. Điều này có ý nghĩa là , nếu biến là 00543380 chương trình truy xuất đến nó bởi chính là số này (00543380)

direct mode: mov eax, dword prt [00543380]

Một cách khác nữa, nó có thể dùng mode addr liên quan. Bạn có thể thấy một ví dụ cho trường hợp này trong phần kế tiếp. Với mode này, chương trình truy xuất biến liên quan đến một “địa chỉ nền” (baseaddress). Base này được chứa trong một thanh ghi. Nếu bạn thấy vài thứ giống như vậy, thì nó là 1 lọai khó để xác định biến global. Nhưng vẫn có thể, bạn chỉ phải search giá trị của offset. Đừng rối với những thứ lọai này, nó sẽ “sáng sủa” hơn trong lần thứ 2 chương trình “chạm” đến nó. Nhìn vào ví dụ sau:

mov eax, [esi + 4EC]
|         |
base offset

Download toàn bộ bài viết:
reversing-generals_phan3


REVERSING-GENERALS (Phần II)
Dịch: Benina

Phần 2
TỔNG QUAN VỀ ĐẢO MÃ

RETURN VALUE (giá trị trả về của hàm)

Nếu hàm trả về một giá trị, nó luôn trả về trên thanh ghi eax hay trong một tham số input nào đó. (nhập vào trước hàm) .Bạn sẽ thấy rằng thường thì nếu nó là tham số input, bằng cách kiểm tra nó ta thấy nó là addr hay một giá trị được cung cấp cho hàm call. Nếu nó là một giá trị, nó ko được chỉ định như một tham số , bạn cần chú ý nó sau này. Nếu nó là một addr, nó sẽ trỏ đến một string như ví dụ sau. Sau dĩ bạn sẽ thấy dòng kế của code miêu tả nó được sử dụng lại hay là ko. Trong phần lớn các case , bạn sẽ thấy nó được sử dụng lại một lần nữa (điều đó thật hiệu quả khi nhớ addr thật của nó). Bây giờ tui sẽ chỉ cho bạn một lập trình viên pascal với cách nhìn của anh ta khi create một hàm. Điều này sẽ làm khái niệm rỏ ràng trong sáng hơn. Ở đây là khai báo của một hàm:

function MyAdd(x, y :integer) : integer; // declaration
var erg: integer; // local var
begin
erg := x + y; // do the things
add := erg; // return value
end;

Đây là một hàm thông thường, nó chỉ cộng 2 số int, có 2 tham số, và một biến cục bộ được sử dụng tạm thời để gán cho giá trị trả về của hàm. ASM phải cần đến là di chuyển 2 tham số này ra khỏi stack khi hàm thực thi xong và nó phải nghịch đảo đầy đủ vùng nhớ cho biến cục bộ của hàm…Giống như đoạn mã này:

; *Pascal*
push ebx ; par1
push ecx ; par2
call MyAdd ; call the function
; in this example, the function restores the
stack (pascal)
mov …, eax ; returnvalue in eax

; *C*
push ecx ; par2
push ebx ; par1
call MyAdd ; call the function
add esp, 8 ; restore the stack
mov …, eax ; returnvalue in eax

;——————————-
; *MyAdd*
;——————————-
push ebp ; save baspointer
mov ebp, esp ; get a grip on the parameters
sub esp, 4 ; make room for the local var

; adding
mov ebx, [ebp+0C] ; get first parameter
mov ecx, [ebp+8] ; get second parameter
add ebx, ecx ; add
mov [ebp-4], ebx ; move result to local var
mov eax, [ebp-4] ; return local var
; returnvalue is eax
leave ; this instruction does the folowing:
; mov esp, ebp
; pop ebp
add esp, 8 ; ONLY for pascal!
ret

Download toàn bộ bài viết:
reversing-generals_phan2


REVERSING-GENERALS (Phần I)
Dịch: Benina

TỔNG QUÁT VỀ “ĐẢO MÔ

Bài này tui tham khảo bài viết của Ignatz/stoicForce . Ở đây , tui ko thể dịch sát nghĩa như các lão ấy viết. Vì dịch sát nghĩa ra tiếng Việt thì chắc cũng ko có ý nghĩa gì hết. Vì mấy Lão này ko phải là Người Anh, nên tiếng Anh họ viết khó dịch quá. Đồng thời trình độ tiếng Anh của Benina cũng thuộc dạng amatơ, nên có gì sơ xuất mong các bạn thông cảm. Ở đây ,tui hiểu như thế nào khi đọc tut này thì tui viết lại như cách mình nghĩ mà thôi. Chỉ là phỏng dịch. Nếu có gì sai các bạn góp ý cho. Vì TUT này rất hay, nên tui chọn tut dành để “biếu” các bạn newbie còn khó khăn khi đọc TUT về Reversing. Đầu tiên , tui xin dịch “Reverse” là “Đảo mã” (Chứ ko phải “đào mả” nhe) cho nó gọn. Nếu có ai dịch từ này hay hơn , xin cho ý kiến để sao này “ko tái phạm”. Hìhì Nói thêm một chút, một anh Reverser khác với một anh Cracker. Hay nói nôn na một anh chuyên đảo mã khác với một anh chàng bẻ khóa. Anh đảo mã có thể trở thành một anh bẻ khóa .Còn anh bẻ khóa thì chưa chắc trở thành anh đảo mã. Vì nếu bạn đảo mã tốt thì bạn dễ dàng trở thành cracker một cách dễ dàng. Vì lý do đó , nên tui mới dịch TUT này , rồi các bạn sẽ hiểu những gì tui nói

ĐIỂM SÁNG TRONG QUÁ TRÌNH ĐẢO MÃ CODE

(CONVENTION) TẬP QUÁN:

Khi bắt đầu đảo mã,bạn sẽ sớm thấy rằng bản chất của vấn đề là thường chúng ta dựa vào một số thói quen khi đọc code, giống như cách mà bạn đặt tên cho biến và chú thích cho vòng lặp . Khi đảo mã cũng giống vậy. Chưa bao giờ tui lượt giảm thông tin trong code, mà luôn luôn thêm thông tin vào.Ví dụ, chưa bao giờ viết đè lên 1 address mà thêm một cái tên sau nó:

mov [00534160], eax
mov [00534160_SerialFlag], eax ; like this you won´t lose vital information

(COMMENT) CHÚ THÍCH CHO CODE

Đó là điều rất quan trọng ,bạn nên dùng những định nghĩa trong sáng cho code và đừng quan tâm khi bạn phải viết nhiều từ để mô tả code.Bạn sẽ yêu chính bạn về việc làm này khi sau này bạn quay lại đọc những ghi chú mà mình đã viết và bạn sẽ ghét bỏ chính bản thân mình khi ko ghi chú đầy đủ để sau này ko lần ra được những bước mình đã đi qua. Nó cũng sẽ làm một vài phần của code trong sáng hơn cho chính bạn . Từ đó bạn cùng sẽ dễ tìm ra mẫu code làm gì nếu bạn chú thích nó một cách đúng đắn. Rule tổng quát cho việc ghi chú thích là: ghi chú thích code làm sao mà một người chưa đảo mã đọan code đó có thể hiểu được mà ko phải “sorry, understand “. Đơn giản thế thôi, nhưng thật sự việc này ko dễ đâu các bạn ạ. Vì ghi chú thích cho mình nhớ thì dễ , nhưng khi ghi chú thích vắn tắt cho một người khác hiểu thì rất khó. Bạn phải có một quá trình đọc code và đồng thời học tập các cao thủ khi họ comment code.

Download toàn bộ bài viết
reversing-generals_phan1


加密与解密工具新年大礼包2009 DVD1
New Year Presents 2009 Edition

PEDIY & China BCG荣誉出品
===============================================================================

本光盘主要收集了常用的加密与解密工具,工具来自bbs.pediy.com兄弟们的分享,我们主要是

负责整理了一下,做个列表和启动,不足之处请原谅!

由于精力实在有限,对本光盘的不足之处请大家海涵。

祝2009年顺心、快乐、健康、幸福!

This DVD-ROM mainly collects the common cracking tools shared by friends of bbs.pediy.com,
we are just responsible for arranging the contents, adding a list and startup. Excuse us
for any flaws.

We are particularly grateful to Allon for his present bag cover.

Wish you a satisfactory, happy and healthy new year!

PEDIY & BCG
2009-01-01

pediy1

pediY2

Download here :
http://book.kanxue.com/Crack_New_Year_Presents_2009.rar

Thanx kanxue and members of Pediy

Regards
m4n0w4r


WARNING : Unauthorized Training

Please be informed that Athena, DDC and Nhat Nghe located in Ho Chi Minh City, Vietnam, are NOT EC-Council authorized training partners and as such are NOT authorized to provide any training whatsoever for EC-Council certifications.

Candidates that take such unauthorized training shall be barred from taking the EC-Council Certification examinations and risk having their certifications revoked. Candidates are only allowed to take training from Authorized Training Partners as a precondition of taking the certification examinations.

http://eccouncil.org/Unauthorized-Training.htm

Cuối cùng thì EC-Council cũng phải lên tiếng về mấy trung tâm dạy chui tại VN :))….. Nhục quá!!