banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Messages posted by: Reversing...  XML
Profile for Reversing... Messages posted by Reversing... [ number of posts not being displayed on this page: 5 ]
 
Anh em HVA có thể góp $ mua một cái host rồi đưa sách lên cho mọi người dùng.
Tớ chưa học VB bao giờ, nhưng hình như VB không được đưa vào chương trình đại học của một số nước trên thế giới, thế thì tại sao phải học chuyên sâu về nó nhỉ?
Theo tớ thi` cứ thẳng tay xóa account hiện thời, tạo cái mới, tốc độ chắc chắn tăng lên .
Giúp được làm admin luôn nha smilie
Cái này 90% là do nguồn yếu. Bạn thử nối máy vào ổn áp thử xem.
À, vậy là bác hiểu rõ rồi đấy chứ . Cái code trên viết trên Dev chứ không phải VC smilie. Pass kô thấy thì chắc phải dump hết bộ nhớ rồi. Tui thấy pw: mypassword nó nằm ở vị trí này.
Code:
.kpnc:0041B000 ; Segment type: Pure data
.kpnc:0041B000 ; Segment permissions: Read/Write
.kpnc:0041B000 _kpnc segment para public 'DATA' use32
.kpnc:0041B000 assume cs:_kpnc
.kpnc:0041B000 ;org 41B000h
.kpnc:0041B000 ; char passwd[]
.kpnc:0041B000 passwd db 'mypassword',0 ; DATA XREF: main+6Eo
.kpnc:0041B00B align 200h
.kpnc:0041B00B _kpnc ends

Lưu ý nữa là ở đoạn code trên phải sửa chỗ #pragma thành thế này mới thấy được:
Code:
#include <iostream>
#include <string>
using namespace std;
#define PASSWORD_SIZE 100
#define PASSWORD "mypassword"
#pragma data_seg (".kpnc")
char passwd[ ]=PASSWORD;
#pragma data_seg ()
int main()
{...}


Còn mấy khái niệm kia thì đôi lúc mình phán thử xem sao: thấy nó thường gặp thế mà smilie
Bây giờ ta viết một chương trình nhỏ kiểm tra password nhập vào, nếu đúng thì chương trình hiển thị dòng chữ Hello, nếu sai thì "Wrong password". Tất cả nằm trong câu lệnh:
if (strcmp (password nhập vào, password đúng)) {/* Wrong password */} else {/* Hello*/}.
 

Có thể dùng Visual Studio 2005 để biên dịch.
Code:
#include <iostream>
#include <string>
using namespace std;
#define PASSWORD_SIZE 100
#define PASSWORD "mypassword\n"
int main()
{
int count = 0; // kiểm tra số lần thử
char buffer[PASSWORD_SIZE];
for(;;)
{
if(++count > 3) return -1;
cout <<"Enter password: ";
cin.getline(buffer, PASSWORD_SIZE);
if (strcmp(buffer, PASSWORD))
cout << "Wrong password\n" ;
else
{
cout <<"Hello\n";
break;
}
}
system("pause");
return 0;
}


Dịch và tạo một file password.exe. Bây giờ nếu dùng IDAPro thì ta thu được code assembly như sau:
Code:
int __cdecl main(int argc, const char **argv, const char *envp)
.text:00401390 _main proc near ; CODE XREF: ___mingw_CRTStartup+E2p
.text:00401390
.text:00401390 var_A8 = dword ptr -0A8h
.text:00401390 var_A4 = dword ptr -0A4h
.text:00401390 var_A0 = dword ptr -0A0h
.text:00401390 var_8C = dword ptr -8Ch
.text:00401390 var_88 = byte ptr -88h
.text:00401390 var_C = dword ptr -0Ch
.text:00401390 argc = dword ptr 8
.text:00401390 argv = dword ptr 0Ch
.text:00401390 envp = dword ptr 10h
.text:00401390
.text:00401390 push ebp
.text:00401391 mov ebp, esp
.text:00401393 sub esp, 0A8h
.text:00401399 and esp, 0FFFFFFF0h
.text:0040139C mov eax, 0
.text:004013A1 add eax, 0Fh
.text:004013A4 add eax, 0Fh
.text:004013A7 shr eax, 4
.text:004013AA shl eax, 4
.text:004013AD mov [ebp+var_8C], eax
.text:004013B3 mov eax, [ebp+var_8C]
.text:004013B9 call ___chkstk
.text:004013BE call ___main
.text:004013C3 mov [ebp+var_C], 0
.text:004013CA
.text:004013CA loc_4013CA: ; CODE XREF: _main+C1j
.text:004013CA cmp [ebp+var_C], 3
.text:004013CE jg loc_401456
.text:004013D4 mov [esp+0A8h+var_A4], offset aEnterPassword ; "Enter password: "
.text:004013DC mov [esp+0A8h+var_A8], offset dword_4433C0
.text:004013E3 call __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
.text:004013E8 mov [esp+0A8h+var_A0], 64h
.text:004013F0 lea eax, [ebp+var_88]
.text:004013F6 mov [esp+0A8h+var_A4], eax
.text:004013FA mov [esp+0A8h+var_A8], offset dword_443460
.text:00401401 call __ZNSi7getlineEPci
.text:00401406 lea eax, [ebp+var_88]
.text:0040140C mov [esp+0A8h+var_A4], offset aMypassword ; "mypassword"
.text:00401414 mov [esp+0A8h+var_A8], eax
.text:00401417 call strcmp
.text:0040141C test eax, eax
.text:0040141E jz short loc_401436
.text:00401420 mov [esp+0A8h+var_A4], offset aWrongPassword ; "Wrong password\n"[/color]
.text:00401428 mov [esp+0A8h+var_A8], offset dword_4433C0
.text:0040142F call __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
.text:00401434 jmp short loc_40144C
.text:00401436 ; ---------------------------------------------------------------------------
.text:00401436
.text:00401436 loc_401436: [/color] ; CODE XREF: _main+8Ej
.text:00401436 mov [esp+0A8h+var_A4], offset aHello ; "Hello\n"
.text:0040143E mov [esp+0A8h+var_A8], offset dword_4433C0
.text:00401445 call __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
.text:0040144A jmp short loc_401456
.text:0040144C ; ---------------------------------------------------------------------------
.text:0040144C
.text:0040144C loc_40144C: ; CODE XREF: _main+A4j
.text:0040144C lea eax, [ebp+var_C]
.text:0040144F inc dword ptr [eax]
.text:00401451 jmp loc_4013CA
.text:00401456 ; ---------------------------------------------------------------------------
.text:00401456
.text:00401456 loc_401456: ; CODE XREF: _main+3Ej
.text:00401456 ; _main+BAj
.text:00401456 mov [esp+0A8h+var_A8], offset aPause ; "pause"
.text:0040145D call system
.text:00401462 mov eax, 0
.text:00401467 leave
.text:00401468 retn
.text:00401468 _main

Password đã lộ diện. Chính tác giả đã đưa password của mình vào data session nên ta có thể thấy ngay.
Bây giờ trong C++ có một cách để "giấu" password này đi. Có nghĩa là ta sẽ không cất nó vào data session mặc định nữa mà sẽ chỉ ra vị trí do ta chọn để cất pass này đi.
Code:
int count=0;
// Từ đây , mọi biến khởi tảo
// được đặt trong .kpnc session
#pragma data_seg (."kpnc")
char passwd[ ]=PASSWORD;
#pragma data_seg ()
// Từ đây, tất cả các biến khởi tạo
// được đặt trong session mặc định (tức., ."data").
char buff [PASSWORD_SIZE]=" ";
...
if (strcmp(&buff[0] , &passwd[0]))
...

Bây giờ, biên dịch rồi dùng IDA sẽ thấy đoạn code bắt đầu từ .text:00401406 ở trên trở thành:
Code:
.text:0040142E lea edx, [ebp-98h]
.text:00401434 mov [esp+0B8h+var_B4], eax
.text:00401438 mov [esp+0B8h+var_B8], edx

Nhiệm vụ bây giờ của ta là làm sao để thấy được password:
Có thể dùng trình dumpbin trong Visual Studio để truy xuất dữ liệu từ một session mà ta chỉ định, lúc này:
dumpbin /SECTION:.kpnc /RAWDATA password.exe 

Sẽ cho ta thấy dữ liệu trong session .kpnc , nơi chứa password của ta.

Về mặc định, mỗi file .exe sẽ có một bảng các session như sau:
Code:
SECTION TABLE
01 .text
VirtSize: 0003DA20h VirtAddr: 00001000h
raw data offs: 00000400h raw data size: 0003DC00h
relocation offs: 00000000h relocations: 00000000h
line # offs: 00000000h line #'s: 00000000h
characteristics: 60000060h
CODE INITIALIZED_DATA EXECUTE READ ALIGN_DEFAULT(16)
02 .data
VirtSize: 00000190h VirtAddr: 0003F000h
raw data offs: 0003E000h raw data size: 00000200h
relocation offs: 00000000h relocations: 00000000h
line # offs: 00000000h line #'s: 00000000h
characteristics: C0000040h
INITIALIZED_DATA READ WRITE ALIGN_DEFAULT(16)
03 .rdata
VirtSize: 00002680h VirtAddr: 00040000h
raw data offs: 0003E200h raw data size: 00002800h
relocation offs: 00000000h relocations: 00000000h
line # offs: 00000000h line #'s: 00000000h
characteristics: 40000040h
INITIALIZED_DATA READ ALIGN_DEFAULT(16)
04 .bss
VirtSize: 00004BE0h VirtAddr: 00043000h
raw data offs: 00000000h raw data size: 00000000h
relocation offs: 00000000h relocations: 00000000h
line # offs: 00000000h line #'s: 00000000h
characteristics: C0000080h
UNINITIALIZED_DATA READ WRITE ALIGN_DEFAULT(16)

Trong đó: .bss : chứa dữ liệu chưa được khởi tạo
.data: chứa dữ liệu mặc định
.rdata: dịch vụ RTL cho dữ liệu
.text: chứa code chương trình

Ta thử viết lại đoạn code viết bằng C sau lại trên ngôn ngữ assembly:

Code:
func();
main()
{
int a;
func();
a=0x666;
func();
}
func()
{
int a;
a++;
}

Giả sử địa chỉ bắt đầu đoạn code trên của ta là .text:00401000. Lúc đó, 2 câu lệnh assembly đầu tiên sẽ là:

.text:00401000 push ebp
.text:00401001 mov ebp, esp
 

_ ebp được dùng để lưu lại giá trị ban đầu của esp. Điều này là cần thiết, bởi nếu trong hàm có biến địa phương thì esp sẽ bị trừ lui đi một số byte địa chỉ.
Tiếp tục với chương trình, câu lệnh assembly tiếp theo sẽ là:

.text:00401003 call 401018
 

_ Lúc này 401018 chính là địa chỉ của hàm func() mà ta sẽ nhảy đến.
Tiếp tục,
.text:00401008 mov dword ptr [ebp-4], 666h 
tương đương với a = 0x666

.text:00401009 call 401018
.text:00401014 mov esp, ebp
.text:00401016 pop ebp
.text:00401017 retn
 

_ 3 câu lệnh sau cùng trả lại giá trị ban đầu cho esp để thoát khỏi hàm.
Và cuối cùng là hàm func()

.text:00401018 push ebp
.text:00401019 mov ebp, esp
.text:0040101B push ecx
.text:0040101C mov eax, [ebp-4]
.text:0040101E add eax, 1 ;-----> Thân của hàm tại đây
.text:00401022 mov [ebp-4], eax
.text:00401025 mov esp, ebp
.text:00401027 pop ebp
.text:00401028 retn
 


Như thế ta đã làm rõ được phần nào cơ chế làm việc của hàm thông qua stack như thế nào.

Tớ làm cái poll này để nghe ý kiến và kinh nghiệm của mọi người trong việc chọn ngôn ngữ lập trình. Mỗi ngôn ngữ sẽ có một thế mạnh riêng, và thật khó để đánh giá hết được điểm mạnh và yếu của từng ngôn ngữ.
Đối với tớ:
- C# và Java hỗ trợ tốt cho lập trình mạng
- C và C++ hỗ trợ tốt cho lập trình hệ thống ( WinAPI và tìm hiểu hệ điều hành )
- Pascal( Delphi) thì lại có ích đối với học sinh thích lập trình bởi tính đơn giản và sáng sủa trong cấu trúc lệnh.

Xin mời mọi người.
Cho tớ góp 1 trang :
/TỔNG HỢP CÁC SITE HAY MỌI LĨNH VỰC smilie
/hvaonline/posts/list/20/13817.html
Khi một người đã viết bài thì họ sẽ không cần người khác phải cám ơn. Còn cách cám ơn thì sẽ phụ thuộc vào người đọc.
Theo tôi diễn đàn nên thêm chức năng duyệt bài viết theo một số chỉ tiêu như là:

- Bài gởi lần cuối
- Số lần trả lời
- Số lần xem
 

Như vậy người đọc sẽ dễ dàng xem và đánh giá được các bài viết.
Vài lời góp ý.
Trong các bạn ở đây, có lẽ có nhiều người chưa từng crack lần nào, và thậm chí chưa biết crack là gì. Trong 3 bài viết dưới đây, tớ sẽ hướng dẫn từng bước để các bạn có thể tự mình crack một chương trình. Sơ đồ như sau:

1) Căn bản về x86 Assembly Language và ngôn ngữ C.
2) Debug & Dissasembler
3) Patch
 

Các bạn chỉ cần Visual Studio 2005 và Far v1.7 .
-----------------------------------------------------------------------------------------------------------------------------------
$1. Assembly
Xin xem thêm chi tiết tại đây

1.Kiểu dữ liệu và biến:
+Khai báo biến:

Dữ liệu có thể chứa ở các thanh ghi ( registers ) hoặc bộ nhớ (memory). Tốc độ truy cập tại registers nhanh hơn so với memory. Ở phần cấu trúc ngôn ngữ máy, ta đã nói về các thanh ghi. Cần nhớ là 1 Byte = 8 bit, 1 Word = 2 Byte (16 Bit), 1 DWORD = 32 bit ( 4 bytes )
Cấu trúc hợp ngữ khai báo biến như sau:

done db 0 ; 1 byte (8 bits),khởi tạo bằng 0
length dw ? ; 1 word (16 bits), không được khởi tạo giá trị
count dd 0 ; 1 dword (32 bits), khởi tạo bằng 0
name db 40 dup(?) ; 40 bytes, không được khởi tạo
 


Cấu trúc câu lệnh trong Assembly như sau:

opcode register
opcode register, memory
opcode memory, register
opcode register, register
opcode register, immediate
 

Điều lưu ý ở đây là 2 cấu trúc vàng ở trên. Như đã nói, trong lệnh MOV, ta cần chỉ rõ là MOV bao nhiêu byte từ memory ( hay immediate ) vào register. Thường số byte được mov phụ thuộc vào hạng tử đứng trước, chẳng hạn trong câu lệnh: mov eax, [esp], 32 byte ở vùng nhớ có địa chỉ nằm trong esp sẽ được đưa vào eax. Nhưng nếu hạng tử đứng trước có số bit xác định thì sao? Lúc này có thể dùng các cấu trúc sau:

mov byte ptr [esi], 0 ; move 1 byte
mov dword ptr [eax], 1 ; move 1 dword
inc word ptr [ebx] ; increment 1 word tại [ebx]
 

Giả sử, ta có câu lệnh như sau: mov dword ptr [eax], 0x12345678. Bây giờ theo các bạn bxcl sẽ chứa giá trị bao nhiêu?

mov bx, word ptr [eax] ;
mov cl, byte ptr [eax] ;
 

Lúc này:
bx = 0x5678
cl = 0x78

Đây chính là điểm cần lưu ý khi ta muốn copy dữ liệu là một số hex vào register.

+ Làm việc với Stack:

Stack là một vùng nhớ được hệ điều hành cấp phát cho chương trình để lưu các giá trị tạm thời, các giá trị đó có thể là các biến, một địa chỉ, hay một hằng số. Chẳng hạn khi ta muốn gọi một hàm có chứa tham số, thì ta phải lưu tạm thời các tham số đó vào đâu đó để sử dụng trong hàm. "Đâu đó" ở đây có thể là stack hoặc registers. Nhưng nếu lưu vào register thì ta lại phải lưu tiếp giá trị cũ của các registers vào đâu đó để thay thế bằng các tham số cho hàm. Chính điều này mà trong các bộ dịch ( compiler ), chính các tham số sẽ được đưa vào stack chứ không phải các thanh ghi.
Ta dùng pushpop để làm việc với stack:

push eax ; đưa giá trị của eax vào stack
pop ebx ; lấy giá trị tại đỉnh stack và đưa vào ebx
 

Thực chất của 2 câu lệnh trên như sau:
Địa chỉ vị trí hiện thời tại stack được cất tại một thanh ghi khác, là esp, mà tại đây ta được phép đọc và ghi. Đầu tiên push trừ giá trị của exp để lưu giá trị vào [esp]. Sau đó pop đọc giá trị [esp] và cộng lại giá trị cho esp.
Như thế, ta thấy rằng:

mov eax, [esp] ----------> lúc này esp không được cộng thêm để trở về giá trị ban đầu.
 


pop edx sẽ tương đương với:
mov edx, [esp]
add esp, 4


và push ax sẽ tương đương với:
sub esp, 2
mov [esp], ax

+ Ngoài mov , cấu trúc lea cho phép nhận giá trị offset của thanh ghi khác như sau:
lea esi, [edi+8] tương đương với
mov esi, edi
add esi, 8


2. Các phép tính số học:
Đối với các phép cộng và trừ.

add ebp, eax ; ebp = ebp + eax
add byte ptr [esi], 5 ; [esi] = [esi] + 5
sub cl, ch ; cl = cl – ch
sub mybyte, al ; mybyte = mybyte - al
 

Với phép nhân và chia thì có hơi khác một tí, lúc này nơi chứa giá trị trả về không đơn thuần là một thanh ghi. Ví dụ:

mul al, bl ; ax = al * bl
mul ax, cl ; dx:ax = ax * cl
mul eax, ebx ; edx:eax = eax * ebx
 

dx:ax = ax * al chỉ ra rằng giá trị trả về sẽ là giá trị 32 bit, 16 bit cao được chứa tại dx, 16 bit thấp được chứa tại ax.

Một vài phép tính nữa được liệt kê dưới đây

;Dịch trái, dịch phải một số byte
shl eax, 4 ; eax = eax * 16
shr al, 1 ; al = al/2
; Cộng, trừ và phủ định
inc eax ; eax = eax + 1
dec word ptr [esi] ; [esi] = [esi] - 1
neg ah ; ah = 0 – ah

; Các phép tính logic:

and eax, ebx ; eax = eax & ebx
or al, ah ; al = al | ah
xor edx, dword ptr [edi] ; edx = edx ^ [esi]
not dx ; dx = ~dx
 



3) Các cở

Có một thanh ghi đặc biệt của CPU chứa các cờ. Các cờ chỉ ra dấu hiệu nhận biết. Chẳng hạn nếu bạn thao tác với một biến x sao cho nó bằng 0, thì cờ Zero Flag sẽ được "dựng" lên. Một số loại cờ tương tự như thể có tên gọi là các cờ trạng thái. Có 4 loại cờ chính: Carry, Zero, Sign, và Overflow . Chẳng hạn, Sign Flag sẽ chứa giá trị của bit dấu của kết quả. Nếu kết quả là số âm, SF ( sign flag ) = 1. ( Tại sao? ).
Cách sử dụng như thế nào?
Ví dụ như sau:

sub ecx, 1
jz mylabel ; như thế phép trừ sẽ tác động vào cờ zero flag, nếu ecx = 0 thì chương trình nhảy đến nhãn mylabel( nằm ở một nơi nào đó trong chương trình )
;;;;;;;;;;;
test eax, 0x02 ; lệnh test thực hiện phép logic and. Như thế nếu bit thứ 2 của eax = 0 thì chương trình nhảy đến
jz mylabel ; mylabel.
 


Dưới đây là bảng cho so sánh của các cờ:

equal/unequal:

je/jz equal/zero (ZF = 1)
jne/jnz not equal/not zero (ZF = 0)

So sánh không dấu:

ja/jnbe above/not below or equal (CF = 0 and ZF = 0)
jae/jnb above or equal/not below (CF = 0)
jb/jnae below/not above or equal (CF = 1)
jbe/jna below or equal/not above (CF = 1 or ZF = 1)

So sánh có dấu:

jg/jnle greater/not less or equal (ZF = 0 and SF = OF)
jge/jnl greater or equal/not less (SF = OF)
jl/jnge less/not greater or equal (SF != OF)
jle/jng less or equal/not greater (ZF = 1 or SF != OF)
 


4) Cấu trúc nhảy:
Phần này ta sẽ nói tóm tắt thông qua ví dụ:

mov ecx, 10
topofloop:
; Các phép toán ở đây
sub ecx, 1
jnz topofloop
 

Nếu dùng loop thì sẽ đơn giản hơn ở chỗ là nó sẽ lấy ecx làm biến đếm.Tức sau mỗi lời gọi loop, ecx sẽ tự động trừ đi1

mov ecx, 10
topofloop:
; operations
loop topofloop
 

5) Thủ tục ( hàm ):
Lời gọi thủ tục được thực hiện qua lệnh CALL sẽ gọi điạ chỉ của thủ tục cần gọi ra.
CALL myfunction
Điều duy nhất lệnh CALL làm là đưa giá trị của eip vào stack sau đó nhảy đến hàm. Để thoát khỏi hàm thì dùng lệnh ret

ret
 

ret sẽ lấy giá trị ở đỉnh ( eip ban đầu ) và đưa chương trình nhảy đến giá trị đó ( tức là chương trình được tiếp tục bởi eip chứa địa chỉ của dòng lệnh tiếp sau dòng lệnh CALL myfunction ). Có thể xem ví dụ sau:

push 0
ret ; chương trình nhảy đến nhảy đến địa chỉ 0 !
 

Với hàm có tham số, chẳng hạn, trong ngôn ngữ C, tính chất lời gọi hàm được quy định là stdcall , tức là các tham số được đưa vào stack từ phải qua trái, như ví dụ sau:
my_func (a, b, c);
tương đương trong assembly như sau:

push c
push b
push a
call my_func
 

Còn trong ngôn ngữ Pascal, các tham số lại được đưa từ trái qua phải vào stack

push a
push b
push c
call my_func
 

Điều đó cho thấy, mỗi ngôn ngữ bậc cao quy định một kiểu làm việc riêng lên stack.
Phần cuối cùng là làm việc với các biến địa phương trong hàm.
Ta nhớ lại thanh ghi esp. Chính khi khai báo một biến địa phương , ta sẽ trừ đi giá trị của esp, chẳng hạn:

sub esp, 8
 

sẽ dành ra một vùng nhớ cho 2 dwords, mà ta có thể truy xuất thông qua [esp] hoặc là [esp + 4].
Như thế, ta có thể thấy sự khó khăn khi phải làm bằng tay công việc này, bởi trước khi gọi ret để thoát khỏi hàm, ta phải ý thức được esp phải trỏ tại giá trị eip , tức là phải đưa chương trình chạy đúng quỹ đạo của nó.

Phần 1 đến đây kết thúc. Ở phần sau, ta sẽ nói về ngôn ngữ C và làm thế nào để debug một chương trình.
Chúc vui.
Rev.
@Anglevn: bài viết trên thực chất chỉ là một phần rất nhỏ trong môn cấu trúc máy tính ( có lẽ bạn chưa được học đến ?). Nó nằm ở phần CPU và bộ lệnh của CPU. Mình đã viết đơn giản đến mức có thể , còn cái lý thuyết của nó thì cồng kềnh hơn nhiều smilie.
Hôm nay lang thang ở web của Microsoft tậu được cái này, đưa lên mọi người tham khảo. Chắc chắn sẽ có nhiều điều khó hiểu. Bên trong máy tính của ta đã xảy ra những gì khi ta bật nguồn ?

1)Đầu tiên là bộ phận nguồn.
Khi bật máy lên, bộ này gởi tín hiệu Power Good đến CPU

2)Đồng hồ trong CPU nhận được tín hiệu Power Good.
Nó sẽ thôi gởi các tín hiệu Reset đến CPU.

3)CPU thực hiện code ROM BIOS.
Bắt đầu từ địa chỉ FFFF:0000.Đây thực chất chỉ là địa chỉ trỏ đến địa chỉ thực sự của ROM BIOS .

4)Kiểm tra phần cứng.
Hệ thống màn hình vẫn chưa được khởi tạo nên lúc này mọi lỗi xảy ra sẽ được phát qua âm thanh.

5)Card màn hình:
Các thủ tục khởi động tiến hành quét bộ nhớ từ địa chỉ C000:0000 đến C780:0000 để tìm video ROM.

6)ROM BIOS kiểm tra xem đây là tắt máy hay restart:
Thông qua 2 byte chứa trong địa chỉ 0000:0472. Mọi giá trị khác với 1234h đều cho biết đây là khởi động nguội.

7)Nếu là khởi động ROM BIOS cho chạy toàn bộ POST (Power On Self Test). Nếu là khởi động lại thì POST chỉ kiểm tra bộ nhớ.

8)BIOS đọc các thông tin cấu hình từ CMOS:
Một phần bộ nhớ (64 байт) được cung cấp điện trên bo mạch chủ. Nhiệm vụ lúc này là xác định xem cái gì được nạp trước: CD-ROM, CD hay đĩa cứng.

9)Nếu là đĩa cứng, BIOS kiểm tra sector đầu tiên trên đĩa về Master Boot Record (MBR). Nếu là ổ CD thì kiểm tra Boot Record ở sector đầu tiên.
Master Boot Record - 512 byte được load vào bộ nhớ tại địa chỉ 0000:7C00, sau đó kiểm tra 2 byte signature - phải là 55AAh.
10)Việc thiếu MBR hay 2 byte này buộc quá trình boot dừng lại. MBR bao gồm 2 phần : partition loader hay Boot loader, chương trình nhận được điều khiển khi khởi động đĩa cứng, thứ hai là bảng phân vùng chứa thông tin về các đĩa logic nằm trên đĩa vật lý

11)Code MBR được thực hiện:
Chọn ổ đĩa chứa hệ điều hành.
Boot Loader kiểm tra bảng phân vùng . và tìm kiếm Boot Record tại sector đầu tiên trên đĩa.
Boot Record - 512 byte là bảng chứa miêu tả của phân vùng (số byte trong 1 sector, số sector trong một cluster ... và chuyển đến file đầu tiên của hệ điều hành (IO.SYS trong DOS).

12)Lúc này điều khiển hệ thống đưa cho Hệ điều hành.
Việc khởi động của Windows XP được kiểm tra bởi file NTLDR, nằm trong thư mục gốc của phân vùng hệ thống. NTLDR làm việc 4 bước:
Xác định phần cứng
Lựa chọn cấu hình.
Đầu tiên NTLDR chuyển processor vào chế độ bảo vệ. Sau đó khởi động driver hệ thống file giúp hdh làm việc với hệ thống file trên đĩa, FAT-16, FAT-32 hay NTFS.

13)Nếu trong thư mục gốc có file BOOT.INI, thì nội dung của nó được đưa vào bộ nhớ . Nếu trong đó có ghi hơn một hệ điều hành, NTLDR dừng công việc của mình và đưa ra menu chọn lựa hệ điều hành trong một khoảng thời gian nhất định.
Nếu file này không có, NTLDR tiếp tục từ bảng phân vùng nằm trên đĩa, lúc này nó làm việc với ổ C:/

14)Nếu người dùng chọn Windows NT, 2000 hay XP, NTLDR kiểm tra việc có nhấn F8 hay không để kiểm tra setup lúc khởi động.
Sau mỗi lần khởi động thành công, hệ điều hành lưu lại danh sách các driver và cấu hình , có tên gọi Last Known Good Configuration.

15)Nếu người dùng chọn Window XP, NTLDR tìm và chạy chương trình DOS là NTDETECT.COM để xác định phần cứng của máy tính.
NTDETECT.COM xây dựng các thành phần, các thành phần này sau đó được đưa vào registry tại nhánh HARDWARE tại HKEY_LOCAL_MACHINE.

16)Sau phần lựa chọn cấu hình NTLDR bắt đầu cho chạy nhân XP(kernel) (NTOSKRNK.EXE).
Trước khi nhân được khởi động thì NTLDR chính là "đạo diễn" trong quá trình khởi động của máy tính. Ngoài nhân ra, còn có Hardware Abstraction Layer (HAL.DLL) nằm trong thư mục System32 được khởi động.

17)NTLDR khởi động driver các thiết bị
Mỗi driver có khóa riêng tại nhánh HKEY_LOCAL_MACHINE\SYSTEM\Services. Nếu giá trị Start là SERVICE_BOOT_START, thì thiết bị sẽ được chạy lúc khởi động.

18)NTOSKRNL trải qua 2 pha. Pha đầu tiên khởi tạo một phần của nhân và các hệ thống con cần thiết cho các service .Tại pha thứ hai cho dấu hiêu ra màn hình.
XP kiểm tra các ngắt tại pha đầu tiên và khởi tạo các service: Memory Manager, Object Manager, Security Reference Monitor và Process Manager.Pha thứ hai bắt đầu khi HAL chuẩn bị cho hệ điều hành xử lý các ngắt . Tất cả hệ thống con được khởi tạo theo trình tự sau:
Object Manager
Executive
Microkernel
Security Reference Monitor
Memory Manager
Cache Manager
LPCS
I/O Manager
Process Manager


19)
Việc khởi tạo I/O Manager bắt đầu tiến trình khởi động các driver hệ thống . Từ lúc này NTLDR dừng công việc.
Sai sót trong việc khởi động driver có thể bắt máy tính khởi động lại và bắt đầu lại Last Known Good Configuration.

20)Nhiệm vụ sau cùng của pha thứ hai là khởi động Session Manager Subsystem (SMSS). Hệ thống này đảm bảo các profile cho người sử dụng. Nó đưa ra màn hình login lúc đăng nhập.
SMSS lại khởi động win32k.sys - hệ thống đồ họa.
Driver chuyển máy tính vào chế độ đồ họa , SMSS cho bắt đầu tất cả các service được cho chạy lúc khởi động. Tiếp tục là quá trình tạo Last Known Good Configuration.
Quá trình khởi động được xem là không thành công nếu ngừoi dùng vẫn chưa đăng nhập vào hệ thống. Quá trình này được khởi tạo bởi file WINLOGON.EXE, được xem là service và chịu sự quản lý của Local Security Authority (LSASS.EXE).
Cuối cùng là các net service.

Dưới đây tớ xin vắn tắt một vài cấu trúc lệnh ngôn ngữ máy. Để thực thi có thể dùng trình Debug trong win.
Thực chất khoảng cách giữa Assembler và Ngôn ngữ máy là khá xa. Với một cấu trúc lệnh, trong Asm bạn có thể dễ dàng chỉ ra được, còn với ngôn ngữ máy thì bạn phải đứng trước hàng trăm lựa chọn. Nói thế thôi, đọc xong vài dòng dưới đây, chắc các bạn cũng có thể tự mình code bằng computer language được rồi.
Format:
opcode - - operand 
( hay Toán tử - Toán hạng )
1. Bit - Byte - Word - DWord
2. Bit là gì? Đó là lượng thông tin chứa trong một vật. Làm sao để biết? - Chẳng hạn một mảng các số từ 1 đến 8 sẽ mang một lượng thông tin là 3 bit. Tức là có thể thay thế 1 bởi 000, 2 bởi 001,... 8 bởi 111.
Dòng CPU 32bit dùng 8 thanh ghi mở rộng sau: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP. Như thế, ta có thể xem các thanh ghi này nằm trong khoảng 000 đến 111 ( 3 bit ).
3. Thử xem 2 câu lệnh assembler sau có gì khác nhau?

mov byte ptr [esi], 0
mov dword ptr [eax], 1
 

Cũng là 0, cũng là 1, nhưng 0 ở trên là 00000000 ( 1 byte ), còn 1 ở dưới là 00...001 ( 31 con số 0 ), tức 1 ở đây được biểu diễn ở dạng 4 bytes. Chính đây cũng là số byte chứa trong EAX , EBX và các thanh ghi mở rộng khác.
4. Để "quậy", có lẽ ta chỉ cần xem xét lệnh MOV là đủ. Hãy xem có những trường hợp nào được xét đến:

a---- Chuyển dữ liệu trực tiếp ( tức một hằng số ) vào thanh ghi.
b----Chuyển dữ liệu từ thanh ghi vào bộ nhớ
c---- Chuyển dữ liệu từ bộ nhớ vào thanh ghi
 

Xét a-
Cấu trúc câu lệnh là:
1011 w reg <các byte dữ liệu> 

w là một bit. w = 0 nếu MOV chuyển 1 byte dữ liệu vào register, và w = 1 nếu chuyển 4 bytes vào register.
Ví dụ :
10111000 00000001 00000000 00000000 00000000  

sẽ chuyển 1( 32 bit ) vào EAX. Ở đây, 32 bit của 1 được viết theo kiểu ngươc lại. Chẳng hạn 12345678h -sẽ được viết là 78h 56h 34h 12h. ( h đây là HEX = 4 bit ). EAX = 000. Bit w = 1 ( mov 32 bit ).

Xét b- và c-
Cấu trúc câu lệnh là:
101000 d w <các byte địa chỉ

Chú ý lúc này ta chuyển dữ liệu nhờ vào địa chỉ của vùng nhớ. Và 1 địa chỉ chứa 4 bytes.
Trong câu lệnh không có thanh ghi bởi ta xem lúc này CPU đang làm việc với EAX hoặc các phần của nó ( AX, AH , AL)
bít d ở đây có nghĩa là direction, d = 0 nếu chuyển từ bộ nhớ vào thanh ghi và d = 1 nếu từ thanh ghi vào bộ nhớ.
w = 0 hay 1 nếu ta xét EAX hay AL.
Ví dụ:
10100001 00000001 00000000 00000000 00000000 
copy giá trị chứa tại địa chỉ 1 vào thanh ghi EAX. ( Tại sao? )
còn
10100000 00000001 00000000 00000000 00000000 
copy giá trị chứa tại địa chỉ 1 vào AL ( d = w = 0 ).
Và các bạn thử để ý: Ta chỉ thay đổi 1 bit để làm một công việc không đơn giản.

5. Bây giờ là phần lý thú nhất. Giả sử ta muốn chuyển dữ liệu giữa 2 thanh ghi thì làm thế nào?
Trong cấu trúc lệnh của CPU 32bit có hỗ trợ một byte phương pháp địa chỉ (ModR/M). Cấu trúc byte này như sau:
2 bit MOD - 3 bit REG - 3 bit R/M 


Byte này có nghĩa là trong câu lệnh phải có 2 toán hạng, và một trong 2 phải là thanh ghi ( code nằm trong 3 bit REG ), toán hạng còn lại có thể nằm trong thanh ghi (khi MOD = 11; lúc này R/M chứa code của register.), hoặc nằm trong bộ nhớ. (R/M="register or memory"smilie.
Ở trường hợp thứ hai, ta dùng bảng sau để tham chiếu địa chỉ cho bộ nhớ:

R/M | MOD=00 | MOD=01 | MOD=10 |
000 | [EAX] | [EAX] + 1 | [EAX] + 4 |
001 | [ECX] | [ECX] + 1 | [ECX] + 4 |
010 | [EDX] | [EDX] + 1 | [EDX] + 4 |
011 | [EBX] | [EBX] + 1 | [EBX] + 4 |
100 | SIB | SIB + 1 | SIB + 4 |
101 | 4 | [EBP] + 1 | [EBP] + 4 |
110 | [ESI] | [ESI] + 1 | [ESI] + 4 |
111 | [EDI] | [EDI] + 1 | [EDI] + 4 |
 

Giả sử ta muốn copy từ EAX vào EBX. Cả hai toán hạng đều nằm trong registers nên MOD=11; Toán hạng thứ nhất năm trong EAX --> REG=000; cái thứ hai nằm trong EBX --> R/M=011; Tổng cộng ta thu được byte ModeR/M là 11000011 (C3). Opcode: toàn bộ 32 bit nên w=1; hướng từ register vào r/m nên d=0. Cấu trúc lệnh thu được sẽ là:
10001001 11000011 (89 C3). 

[ Một bài tập nhỏ: Hãy thử thiết lập câu lệnh copy từ EBX vào EAX ]
Thật sự ta sẽ thu được một câu lệnh khác với cấu trúc ở trên. Nhưng chúng không có gì khác nhau. Trong Assembler, 2 cấu trúc này được viết là :
MOV EAX, EBX  
.

Hy vọng các bạn sẽ không còn bỡ ngỡ khi phải debug một chương trình nào đó.
Chúc vui!
Rev.
-------------------------------------------------------------------------------------------------------------
Theo tớ để hiểu mấy cái tào lao này không gì tốt hơn bằng lập trình nó. Bạn vào box tài liệu hữu ích và chụp một cuốn lập trình mạng nào đó . Chắc chắn 1 tuần là đủ để hiểu mấy cái này.
Không được quyền như Admin thì còn tệ hơn là bị virus smilie
Internet Connection ---> TCP/IP------>Properties------>Advanced----->Option----->TCP/IP Filtering--------->Properties-------->Add ( 80, 749, 389, 123, 135, 1024, 445, 3268 ... )----->OK
Bạn muốn xem chi tiết về các service trong máy bạn? Hay là process?
Với các công cụ như cmd thì là không thể. Tuy nhiên , trong windows hỗ trợ một công cụ cho các administrator : Windows Script Host ( xin mời các bạn vào trang web của microsoft để tìm hiểu kỹ hơn ). Có thể lấy một ví dụ :
Run->wmic ->Enter 

Tại con trỏ lệnh, gõ process. Ban sẽ thấy chi tiết tất cả các process trong máy bạn.
Về WMI có dịp ta sẽ bàn đến nó. Còn bây giờ, nếu bạn có thắc mắc về một service nào đang chạy , có thể xem list ở phía dưới
Format: Tên 1 ----------- Tên 2 -------------- Tên 3
với Tên 1: Tên của service khi vào Control Panel -> Administrator - > Services
Tên 2: Tên trong registry
Tên 3: Tên trong Taskmgr.
Về chức năng của mỗi service, các bạn hãy vào trang web của Microsoft để tìm kiếm.
----------------------------------------------------------------------------------------------------------------------------
1.Automatic Updates --------------- wuauserv --------------svchost.exe
2. WMI Performance Adapter)------- WmiApSrv -----------wmiapsrv.exe
3. Wireless Zero Configuration------- WZCSVC -------------svchost.exe
4. Internet Connection Firewall/Internet Connection Sharing)----- SharedAccess -----------svchost.exe
5. ICS----------------- SharedAccess ----------------svchost.exe
6. WebClient) --------------------WebClient ---------------svchost.exe
7. Secondary Logon---------------- seclogon ----------------------------svchost.exe
8. Remote Access Auto Connection Manager------------ RasAuto -------------svchost.exe
9. Logical Disk Manager------- dmserver ----------------svchost.exe
10. (Upload Manager)--------------- uploadmgr -----------------svchost.exe
11. Print Spooler---------------- Spooler ----------------spoolsv.exe
12. Remote Access Connection Manager---------- RasMan --------------svchost.exe
13. Remote Desktop Help Session Manager------- RDSessMgr -------------sessmgr.exe
14. Network DDE DSDM--------------- NetDDE dsdm -------------netdde.exe
15. Security Accounts Manager----------- SamSs ------------lsass.exe
16. Human Device Access Interface---------- HidServ ------------svchost.exe
17. Event Logs --------- Eventlog ------------services.exe
18. Performance Logs and Alerts--------------SysmonLog -------------smlogsvc.exe
19. Protected Storage -------------- ProtectedStorage -------------lsass.exe
20. Windows Management Instrumentation------------ Winmgmt ------------svchost.exe
21. Uninterruptible Power Supply----------- UPS ------------ups.exe
22. Distributed Link Tracking Client----------- TrkWks -------------svchost.exe
23. Distributed Transaction Coordinator---------- MSDTC --------------msdtc.exe
24. Remote Procedure Call Locator(RPC) ------- RpcLocator ---------locator.exe
25. Routing and Remote Access------------ RemoteAccess ------------svchost.exe
26. Smart Card Helper--------------SCardDrv ---------------SCardSvr.exe
27. TCP/IP NetBIOS Helper Service--------- LmHosts ---------------svchost.exe
28. Computer Browser ------------- Browser ---------------svchost.exe
29. Shell Hardware Detection---------- ShellHWDetection -------------svchost.exe
30. Task Scheduler------------- Schedule --------------------svchost.exe
31. NT LM Security Support Provider------------- NtLmSsp --------------lsass.exe
32. Workstation----------- lanmanworkstation ------------svchost.exe
33. Windows Management Instrumentation Driver Extension------- Wmi-------- svchost.exe
34. Net Logon----------- Netlogon --------------lsass.exe
35. Network Connections---------------- Netman ---------------svchost.exe
36. Server---------------lanmanserver ------------svchost.exe.exe
37. ClipBook----------- ClipSrv -----------clipsrv.exe
38. Portable Media Serial Number---------- WmdmPmSp -------------svchost.exe
39. COM+ Event System------------ EventSystem ------------svchost.exe
40. COM+ System Application-------------COMSysApp ----------dllhost.exe
41. Logical Disk Manager Administrative Service---------- dmadmin ------------dmadmin.exe
42. System Restore Service-------- srservice----------- svchost.exe
43. Windows Time----------- W32Time -------------svchost.exe
44. Windows Image Acquisition (WIA)------------ stisvc ------------svchost.exe
45. Indexing Service------------ cisvc -------------cisvc.exe
46. SSDP Discovery Service----------- SSDPSRV ---------svchost.exe
47. Error Service Reporting -------ERSvc ----------------svchost.exe
48.Multimedia-------------- WmdmPmSp ------------svchost.exe
49. Network Location Awareness (NLA)-------------- Nla ------------svchost.exe
50. Network DDE----------- NetDDE --------------netdde.exe
51. Messenger--------------- Messenger ------------services.exe
52. Fax Service------------FAX -----------fxssvc.exe
53. Application Layer Gateway Service----------- -ALG -------alg.exe
54. IMAPI CD-Burning COM Service---------- ImapiService ------------imapi.exe
55. Cryptographic Services--------------- CryptSvc -------------svchost.exe
56. Terminal Services----------------- TermService ---------------svchost.exe
57. IPSEC Services----------------PolicyAgent --------------lsass.exe
58. Fast User Switching Compatibility----------- FastUserSwitching Compatibility--- svchost.exe
59. Help and Support----------- helpsvc----------- svchost.exe
60. Removable Storage------------NtmsSvc ------------svchost.exe
61. Telephony--------------- TapiSrv------------------- svchost.exe
62. Themes-------------- Themes-------------- svchost.exe
63. Volume Shadow Copy---- VSS -------------vssvc.exe
64. System Event Notification-------------- SENS -----------svchost.exe
65. Remote Procedure Call (RPC)---------- RpcSs----------- svchost.exe
66. Remote Registry Service-------------- RemoteRegistry ----------svchost.exe
67. Universal Plug and Play Device Host---------------UPNPhost -----------svchost.exe
68. Application Management--------------- AppMgmt -------------svchost.exe
69. Background Intelligent Transfer Service----------- BITS -----------svchost.exe
70. Security Center-------------- wscsvc ------------------svchost.exe
71. DHCP Client-------------- Dhcp ---------------svchost.exe
72. DNS Client------------- Dnscache -----------svchost.exe
73. NetMeeting Remote Desktop Sharing------------- mnmsrvc---------- mnmsrvc.exe
74. Plug and Play-------------- PlugPlay ---------------services.exe
75. QoS RSVP-------------- RSVP -----------------rsvp.exe
76. Telnet-------------- TlntSvr ------------------tlntsvr.exe
77. Windows Audio---------------- AudioSrv ---------------svchost.exe
78. Windows Installer--------------MSIServer ------------msiexec.exe
79. World Wide Web Publishing--------------W3SVC ------------inetinfo.exe
80. Simple TCP/IP Services-------------- SimpTcp -------------tcpsvcs.exe
81. TCP/IP Printer Server--------------- LPDSVC ----------tcpsvcs.exe
82. SNMP Trap Service-------------- SMNPTRAP-----------snmptrap.exe
83. SNMP Service--------------- SMNP ------------- snmp.exe
84. RIP Listener----------------lprip --------------svchost.exe
85. FTP Publishing Service------------MSFTPSVC -------------inetinfo.exe
86. IIS Admin-------------IISADMIN ----------------inetinfo.exe
87. Message Queuing-------------MSMQ -------------mqsvc.exe
88. Message Queuing Triggers--------------- MSMQTriggers -------------mqtgsvc.exe
89. MS Software Shadow Copy Provider---------------SwPrv -----------dllhost.exe
90. Simple Mail Transport Protocol (SMTP)--------------- SMTPSVC --------------inetinfo.exe
------------------------------------------------------------------------------------------------------------------

Một cuốn sách rất hay về hack firefox: download

Bảo mật = "Thà mất tất cả chứ không để mất pw"
5 thủ thuật nhỏ sau có thể giúp bạn giải quyết một số khó chịu khi dùng windows
1. Shutdown
Cho phép windows tự động tắt những chương trình đang chạy khi bạn shutdown. Tức ta không phải trả lời việc có tắt các ứng dụng đang chạy hay không khi shutdown computer.
HKEY_CURRENT_USER\Control Panel\Desktop. Edit the AutoEndTasks 
--> sửa thành 1 ( nếu có ), nếu không có khóa đó, bạn tạo khóa như trên.
2. Thay đổi tên user registered:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion 
, tìm khóa RegisteredOwnerRegisteredOrganization, rồi thay đổi theo ý muốn của bạn.
3. Program Time Out:
Khi một ứng dụng bị treo , window đưa ra một dialog thông báo về việc này. Thời gian "bị treo" của chương trình từ đó window đưa ra thông báo là 5 giây ( theo mặc định ). Ta có thể tăng thời gian trên bằng cách sau:
HKEY_CURRENT_USER\Control Panel\Desktop 
, Chọn HungAppTimeout và sửa giá trị theo miliseconds. ( Mặc định là 5000 ).
4. Disk Cleanup :
Window thường đưa ra thông báo về việc đĩa của bạn không đủ chỗ chứa dữ liệu . Bạn muốn không cho nó xuất hiện nữa thì làm như sau:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 
, tạo một DWORD value với tên NoLowDiskSpaceChecks, rồi cho nó giá trị 1.
5. Installing Program:
Khi bạn cài đặt một chương trình, window đưa ra đường dẫn mặc định là C:\Program Files. Bạn muốn thay đổi đường dẫn này thì làm như sau:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 
. Tìm đến value với tên ProgramFilesDir. Thay đổi với đường dẫn đến thư mục bạn muốn cài.
6. .reg
Nếu bạn muốn chỉnh sửa các khóa trong registry, tốt nhất hãy sửa nó bằng notepad. Để làm việc này, bạn làm như sau:

1. Thực hiện backup dữ liệu trước khi chỉnh sửa trong registry bằng cách:
Start -> Control Panel -> Performance and Maintenance -> System Restore rồi thực hiện các bước theo wizard.
2. Bạn vào regedit. Giả sử ta đang ở nhánh HKEY_CURRENT_USER\Control Panel\Accessibility , bạn vào Menu File->Export. Lúc này, bạn đã tạo một file .reg. Nội dung của nó lúc này là:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Control Panel\Accessibility]
[HKEY_CURRENT_USER\Control Panel\Accessibility\Blind Access]
"On"="0"
[HKEY_CURRENT_USER\Control Panel\Accessibility\HighContrast]
"Flags"="126"
"High Contrast Scheme"="High Contrast Black (large)"
[HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Preference]
"On"="0"
[HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response]
"AutoRepeatDelay"="1000"
"AutoRepeatRate"="500"
"BounceTime"="0"
"DelayBeforeAcceptance"="1000"
"Flags"="126"
[HKEY_CURRENT_USER\Control Panel\Accessibility\MouseKeys]
"Flags"="62"
"MaximumSpeed"="80"
"TimeToMaximumSpeed"="3000"
[HKEY_CURRENT_USER\Control Panel\Accessibility\SerialKeys]
[HKEY_CURRENT_USER\Control Panel\Accessibility\ShowSounds]
"On"="0"
[HKEY_CURRENT_USER\Control Panel\Accessibility\SoundSentry]
"Flags"="2"
"FSTextEffect"="0"
"WindowsEffect"="1"
[HKEY_CURRENT_USER\Control Panel\Accessibility\StickyKeys]
"Flags"="510"
[HKEY_CURRENT_USER\Control Panel\Accessibility\TimeOut]
"Flags"="2"
"TimeToWait"="300000"
[HKEY_CURRENT_USER\Control Panel\Accessibility\ToggleKeys]
"Flags"="62"
 

Chỉ việc chỉnh sửa các khóa ở đây rồi save là đủ.
3. Bây giờ , khi bạn double-click lên file .reg. Window sẽ mặc định gọi là regedit.exe để ta chỉnh sửa nó. Để mặc định là notepad, bạn làm như sau:
Tools->Folder Options->File Types-> Chọn REG -> Advanced-> Chọn Edit->Set Default-> OK
Nếu muốn dùng một chương trình khác để sửa registry, bạn chọn đường dẫn ở mục Edit ở trên , rồi cho đường dẫn như sau ( ví dụ ):C:\Program Files\TextPad 4\TextPad.exe %1

R

Chi tiết tham khảo tại đây
Bây giờ ta sẽ nói nhiều hơn về Windows bằng giao diện API. Gọi là giao diện, bởi qua đây ta có thể gián tiếp thực hiện các nhiệm vụ quan trọng của hệ điều hành: quản lý và đồng bộ tiến trình ( process), quản lý bộ nhớ (memory manament), quản lý hệ thống file . Với mỗi nhiệm vụ trong windows xây dựng một lớp các hàm API giúp người dùng trực tiếp tác động lên tài nguyên hệ thống , nhưng trong chế độ bảo vệ của chính hệ điều hành windows. Thông qua API, ta sẽ hiểu windows làm việc thế nào với các chương trình. Và bây giờ sẽ là một ví dụ: Clipboard - đây chính là một trong những cách mà windows cho phép trao đổi dữ liệu giữa các chương trình với nhau. Chẳng hạn, bạn copy một file ảnh từ Paintbrush, sau đó copy vào file doc nào đó, rồi chỉnh sửa trong Photoshop..., chính ngừoi dùng đã làm việc với Clipboard để làm các công việc này.
Cần nhớ rằng: Clipboard chỉ là một vùng nhớ nằm trong bộ nhớ.
Mỗi khi bạn click phải chuột và copy một file, có phải dữ liệu từ file đã được đưa vào Clipboard?
Câu trả lời là không. Thực sự nó chỉ đưa vào Clipboard định dạng của dữ liệu và địa chỉ vùng nhớ chứa dữ liệu đó. Sau đó khi một chương trình cần đọc dữ liệu trong Clipboard thì file mới thực sự được đưa vào Clipboard.
Các hàm API cơ bản nhất giúp làm việc với Clipboard:

1)BOOL WINAPI OpenClipboard(HWND hwnd); // truy cập đến Clipboard
2)BOOL WINAPI CloseClipboard(void); // sau khi sử dụng Clipboard, chương trình đóng Clipboard lại
3)BOOL WINAPI EmptyClipboard(void); // làm rỗng Clipboard
4)HANDLE WINAPI SetClipboardData(UINT uFormat, HANDLE hData); // thực hiện ghi vào Clipboard
5)HANDLE WINAPI GetClipboardData(UINT uFormat); // đọc từ Clipboard
 


Ta lưu ý đến hàm thứ 4. Tham số của nó là uFormat và hData.
uFormat - như đã nói ở trên , chính là định dạng dữ liệu cần đưa vào Clipboard.
Nó có thể là: CF_TEXT ( dạng mảng các ký tự ), CF_BITMAP ( mảng các bit ),...
còn hData - một số nguyên đặc trưng cho vùng nhớ cần lưu.
Dễ thấy rằng , khi ta copy file vào Clipboard, chẳng có dữ liệu nào từ file được copy cả !

Trình tự thực hiện khi copy sẽ là:

- Open Clipboard
- Empty Clipboard
- Tách một vùng nhớ ( chính là Clipboard ) có dung lượng đủ để chứa dữ liệu . ( hàm GlobalAlloc () )
- Cố định vùng nhớ đó ( dùng hàm GlobalLock() )
- Thực hiện ghi vào Clipboard
- Tháo bỏ tính "cố định" của Clipboard ( GlobalUnlock())
- Gọi hàm SetClipboardData với các tham số cần thiết
- Đongs Clipboard.
 


Các soft và tài liệu iên quan:
1) Trình dịch Dev-Cpp
2) Visual Api
3) Tutorial Api
4) Programming Windows
-
Cách để diệt virus: copy 1 file nào chứa virus ( kích cỡ càng lớn càng tốt), paste vào usb. Trong lúc đang copy nữa chừng thì bạn rút cái USB ra ngay lập tức, con virut đang chạy từ máy ra USB sẽ bị rớt ra ngoài . Sau đó bạn bắt nó bỏ vào bịch nilon, đem ra viện Pasteur cho mấy ổng xét nghiệm và cho nó uống một loại thuốc gì đó. Bạn đem về thả lại vô máy, con virus đã được uống thuốc sẽ truyền thuốc cho bạn tình của nó, cứ như vậy chúng sẽ bị dính thuốc hết và tới một thời gian nhất định, thuốc sẽ có tác dụng và virus sẽ bị chết hàng loạt
@mystery_hacker: sorry vì tớ quên xem lại. Các bạn vào đây hoặc đây để down mấy link trên.
@PhamTienSinh: Xin lỗi vì không nói rõ. Ở đây có ý là bạn phải tắt giao tiếp qua cổng đó đối với chương trình nào đó. Chẳng hạn qua Firewall ta có thể tắt giao tiếp cho một chương trình nào mình muốn. Còn trong registry, muốn biết, ta phải tìm kiếm qua chức năng Find trong regedit.

Thực ra tớ rất muốn post các bài viết về lập trình APi. Hy vọng topic sẽ tiếp tục.
Lập trình java thì bạn nên dùng eclipse123 , hiện nay đã có phiên bản 3.2.
Còn về lập trình thì java đúng là pure oriented programming. Nếu ai học java trước học C thì lại thấy C không quen, và ngược lại. Nói chung các expert thường chọn java hoặc C# cho các dự án lớn,,,
 
Go to Page:  First Page Page 2 Page 4 Last Page

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|