ป้องกันการใช้ซอฟต์แวร์ DeDe เพื่อถอดรหัสโปรแกรม delphi
นี่คือบทความเพื่อป้องกันการใช้ซอฟต์แวร์ DeDe เพื่อถอดรหัสโปรแกรม delphi ~
ที่อยู่ใน "" เป็นคำอธิบายประกอบของฉัน และส่วนที่เหลือเป็นผลงานต้นฉบับ~
โปรแกรม โครงการ1;
การใช้งาน
แบบฟอร์ม
หน้าต่าง,
ระบบซิสเต็มส์,
Unit1 ใน 'Unit1.pas' {Form1}
Unit2 ใน 'Unit2.pas' {Form2};
ฟังก์ชัน RegisterServiceProcess(dwProcessId, dwType: dWord): จำนวนเต็ม Stdcall;
ภายนอก 'kernel32.dll'
{$อาร์ *.เรส}
วาร์
HMUTEX: HWND;
RET: จำนวนเต็ม;
hCurrentWindow: HWnd; // จำเป็นต้องมีการถอดรหัส
szText: Array[0..254] Of char; //จำเป็นสำหรับการถอดรหัส
เริ่ม
แอปพลิเคชันเริ่มต้น;
APPLICATION.TITLE:= 'การออกแบบคอลเลกชันดอกทานตะวันเดลฟี: Zhang Guopeng';
RegisterServiceProcess(GetCurrentProcessID, 1); //ให้โปรแกรมหายไปใน Ctl+Alt+Del
"เราเห็นได้ว่าผู้เขียนใช้ RegisterServiceProcess เพื่อลงทะเบียนโปรแกรมเป็นเซอร์วิสโปรแกรม WINDOWS~"
"แต่ทุกคนรู้ดีว่าฟังก์ชันนี้รวมอยู่ใน kernel32 และใช้งานได้เฉพาะใน 98/ME เท่านั้น~"
“ดังนั้น อย่าถือว่าสิ่งนี้เป็นกุญแจสำคัญในการถอดรหัส มันสามารถพูดได้ว่าสามารถแจกจ่ายได้~”
// ป้องกันไม่ให้การคอมไพล์เริ่มต้น
hCurrentWindow := GetWindow (APPLICATION.Handle, GW_HWNDFIRST);
"จากที่กล่าวมาข้างต้น ผมทราบว่าผู้เขียนต้องการทราบว่าหน้าต่างโปรแกรมของเขาเป็นหน้าต่างระดับบนสุดหรือไม่"
ในขณะที่ hCurrentWindow <> 0 ทำ
เริ่ม
ถ้า GetWindowText(hCurrentWindow, @szText, 255) > 0 แล้ว
ถ้า pos('DeDe', StrPas(@szText)) <> 0 จากนั้น
"ถ้าไม่ใช่ ให้เรียกชื่อฟอร์มเดสก์ท็อปปัจจุบันและพิจารณาว่าเป็น "DeDe" หรือไม่"
เริ่ม
APPLICATION.MESSAGEBOX('ต้องการถอดรหัสฉันหรือไม่ มันไม่ง่ายเลย!',
'ฮ่าฮ่า...เจ้า! ', mb_ok);
//closewindow(hCurrentWindow);//ย่อหน้าต่างโปรแกรมให้เล็กสุด
Enablewindow(hCurrentWindow, เท็จ);
//ทำให้หน้าต่างของโปรแกรมเป็น unactivated ถ้าได้หมายเลข thread ID ของโปรแกรมแล้ว ก็จะทำให้โปรแกรมใช้งานไม่ได้และปิดไม่ได้ใช่ไหมครับ
“สองประโยคข้างต้นเป็นการปฏิบัติต่อพพพ~”
"closewindow: เพื่อย่อขนาดหน้าต่างที่ระบุ แต่หน้าต่างจะไม่ถูกล้างออกจากหน่วยความจำ~"
"Enablewindow: อนุญาต/ปิดการใช้งานเมาส์และคีย์บอร์ดในหน้าต่างที่ระบุ false จะไม่ทำงานอย่างแน่นอน~"
หยุด;
จบ;
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
จบ;
//ป้องกันไม่ให้การคอมไพล์สิ้นสุด
//ป้องกันไม่ให้โปรแกรมทำงานสองครั้ง
HMUTEX := CREATEMUTEX (ไม่มี, FALSE, 'การออกแบบคอลเลกชันดอกทานตะวันเดลฟี: Zhang Guopeng');
RET := GETLASTERROR;
ถ้า RET <> ERROR_ALREADY_EXISTS แล้ว
เริ่ม
แอปพลิเคชัน CreateForm (TForm1, Form1);
// Application.CreateForm(TForm2, Form2);
แอปพลิเคชันเรียกใช้;
จบ
อื่น
APPLICATION.MESSAGEBOX('โปรแกรมถูกรันแล้ว!', 'พร้อมท์', mb_ok);
releasemutex(hmutex);
จบ.