Ters mühendislik program kırma

fatihozel

New member
Bir programı cracklemek yada tersine çevirmek kesinlikle kanunlara aykırı ve hoş olmıyan bir davranıştır, eğer ücretli bir programı satın almayıpta cracklerseniz o programın yapımcısının ileride daha iyi programlar yapması ve sizlere daha iyi hizmet etmesini engelliyecektir. Ters mühendislik işleri yapacaksanız en azından sizden başkasının sizin yaptığınız cracki kullanmasına izin vermeyin...

Kısa bilgiler ve bilinmesi gerekenler:programın cracklenmesi o programın yazılış amacı dışında davranmasına yada program içerisindeki kısıtlamaları kaldırmak için dışarıdan yapılan etki ve değişikliklerdir.
Peki programlar nasıl cracklenir? Bu soru için en önemli şey işletim sisteminin, bilgisayarın ve programların işleyişi hakkında iyi bir bilgi sahibi olmak... Yani eğer herhangi birisi hakkında bir kopukluk söz konusu ise programı kırmanız çok zor bir hal alır kırılsa bile buna büyük bir şans diyebiliriz.... Yani kısacası programın yapacağı şeylerin tümünü kafanızda canlandırabilmelisiniz, bazen gözden kaçan ufak birşey programcı yada cracker için can sıkıcı saatler geçirilmesine neden olabilir. Bir cracker’ in kesinlikle bazı temel konuları bilmesi gerekmetedir. Ben bazıları hakkında kısa kısa yazıyorum...
Derleyiciler ( çevirmen (translater) olarak ta adlandırılır. Örnek Fortran, C, C++, Pascal, Basic, Delphi) Derleyiciler yüksek seviyeli bir dilde yazılan bir ifadeyi düşük seviyeli dile (makine diline) çeviren yazılımlara denir ve bunlar genel olarak CPU nun işleyebileceği bir dil (makine dili) olarak Hexedecimal (onaltılık) bir düzene sokan yazılımlar haline çevirirler. Makine diline çevrilmis programlar içerisinde programın gerçek kodları yani programcının kullanmış olduğu komutları tam anlamı ile açık ve net olarak görmek imkansızdır. Makine dili denilen dil rakamsal bir dildir . Bu onaltılık sayı düzeninde bulunan kodlar ikilik sayı sistemine (binary) dönüştürülerek CPU ‘ya gider 0 ve 1 ler bilgisayarin işleyisindeki temel olan elektrik sinyali var (1) elektrik sinyali yok (0) olarak CPU tarafindan yorumlanarak programların çalıştırılması sağlanır. Altta bilgisayarımızın bilgi işlem üniteleri diyebileceğimiz bölümleri vardır...

CPU, Merkezi işlem birimi (=Central Processing Unit)

CU, Kontrol Birimi (=Control Unit) , Bütün bilgisayar işlemini koordine eder.

ALU, Matematik – Mantık Birimi (=Arithmetic-Logic Unit) : Kontrol Birimine bağlı olarak Matematiksel işlemleri, alfabetik işlemleri, iki sayıyı kıyaslama gibi işemleri düzenler.

RAM, Rastgele Erişilebilir Bellek (=Random Access Memory)

HDD, Sabit Disk Sürücü (=Hard Disc Driver)

FDD, Disket Sürücüsü (=Floppy Disc Driver)

CD-ROM, Sıkı Disk - Sadece Okunabilir Bellek (=Compact Disc – Read Only Memory)

Makine dili çok karışık ve anlaşılması güç bir dildir bu yüzdende ASSEMBLY (Kaynak dosyayı bir nesne dosyaya dönüştüren yazılım paketidir.) dili geliştirilmiştir. Bu dil bilgisayar dilleri içerisinde en alt düzey programlama dilidir. Bu dil ile yazilan programlar CPU ya direkt olarak hitap eder . Asssembly dili ile büyük programlar yazmak çok zordur. Ve şu anda sadece bazı sürücü dosyaları ve virüs yazarları tarafından kullanılmaktadır, bunun en büyük sebebi bu dille yazılan program(cık)ların diğer dillerde yazılan programlara göre daha az yer kaplamasıdır... Buda virüs yazarlarının en büyük avantajıdır...


Windows işletim sistemi altında çalışacak programlarda işletim sisteminin içerisinde bulunan bazı foksiyonları kullanması (Windows / System dizini altında bir çok DLL uzantılı dosya mevcuttur. Işte bu dosyalar içerisinde programlarin çalisirken kullandigi birçok fonksiyon yada tanım bulunur) programın kırılmasında cracker için bir avantaj programcılar içinse bir dezavantaj (yapılacak harekete bağlı) sağlamaktadır. Ancak tabii burada programcı için dezavantaj dediğimizin bir 50 katıda avantaj söz konusudur programcılar için... Ve ayrıca windows API’ leri hakkında iyi bir bilgi sahibi olan cracker sonraki crack işlemlerinde artık kendisini bir seri üretime geçirebilir.. :)


Programlara ters mühendislik işlemleri ve crack uygulamaları gerçekleştirebilmemiz için bu programları anlayabileceğimiz bir şekile sokmak gerekir bunun içinde bu programlari ASSEMBLY diline çevirmemiz gerekecek.

Bu iş için kullanacagimiz programlara Disassembler denilir . Programlarin içerigini yani onaltilik sayi düzenindeki içerigini görüntüleyebilmek içinse HEX editörlerini kullanacağız.

Bunun haricinde ise bazen programlarin CPU daki o an ne iş yaptığını görmemizi sağlıyan programlara yani Debugger adı verilen programlara ihtiyaç duyacağız.

Eğer bir program compress edilmiş ise o programı decompress edebilmek içinse compress aracına göre decompressini bulmamız gerekecek. Çünki compress edilmiş bir dosyayı onaltılık bir düzende doğru şekli ile görebilmemiz imkansızdır...

Tabi bunun yanında hangi program ile compress edildiğini bulabilmek içinde exe info yada exe tarayıcılar mevcut bu yazılımlar ile programın hangi dille yazıldığını, hangi compress aracı ile compress edildiğini öğrenebilirsiniz...

Benim şimdilik aklıma gelenler bunlar, sanırım bu bilgiler yeni bir cracker için yeterli olacaktır...Her yiğidin bir yoğurt yeme şekli vardır derler ya her crackerinde farklı bir crackleme yöntemi vardır... İşte bu yüzden benim söyleyeceklerimi izlemek yada aynısını yapmak zorunda değilsiniz sizin kendinize ait gözlemlerinizle her zaman daha iyi sonuçlar alabilirsiniz...

Şimdi konuya geçebiliriz sanırım...

Eğer bir programı kırmaya karar vermişsek o programın dissasemble edilmiş koduna ihtiyacınız vardır , bununda iki yolu vardır ya bir dissasembler programı kullanarak yada debugger kullanarak bu programın içeriğini görüntüleyebilirsiniz.

Programı dissasemble etmek için eğer desasembler kullanırsak bu debuggerden daha uzun sürecektir çünki tüm exe analiz edilip içinde geçen tüm jump ve call komutları için referans açıklamaları oluşturmak gerekir, debuggerde ise sadece programın o anda işlenen kodu görüntülenir.

Diyelimki bir programımız var ve tam sürüm için bizden register etmemizi istiyor, bu programın dissasemble edilmiş kodunu istediğimiz yöntemle aldıktan sonra programın kullandığı windows API’lerinin listesinden getwindowtexta fonksiyonunu arayıp breakpoint olarak işaretlememiz gerekiyor, sonra getwindowtexta fonksiyonunu çağıran her breakpoint’te duraklayacağız , çünkü biz breakpointları koyarken hangisinin neredekine ait olduğunu bulmamız zor olcaktır ve istediğimiz registiration ekranındaki geçen getwindowtexta fonksiyonuna ulaşana kadar bu işlemi sürdüreceğiz bundan sonra ise disassembler ekranındaki satırları rahatça inceleyip gerekli kodu , algortimayı yada patch uygulayacağımız noktaya gerekli patch işlemini yapmak kalıyor.

Ben buraya kadar bu işleri kısa kısa ve anlaşılabilecek tarzda anlatmaya çalıştım altta süreli programları kırmak için izlenecekyol bulunuyor... (thnx matrix)

Süreli Programları Kırmak

Zaman Ayarlı Programları Cracklemek

Ihtiyacımız Olanlar;
SoftICE Symbol Loader Ile Beraber
W32Dasm
Ultra Edit
Text Editörü
Call Flow
--------------------------------------------------
Herhangi bir program çalıştırıldığında, bir seri fonksiyon, prosedür ve açıklamalardan (hem prosedürler hem de fonksiyonlar açıklamalardan oluşan, zaman ve yerden kazanmak için oluşturulmuş guruplardır) geçer. Call Flow dediğimiz olgu ise bir programın çalıştırıldıktan sonra izlediği yolun bir listesi ya da diyagramına verilen addır. Bu yol programın çalıştırıldığı zamandaki koşullar nedeniyle farklılıklar gösterebilir. Şimdi aşağıdaki hayali 6 prosedürü inceleyelim:


1.) GetSystemTime. (Sistem zamanını kontrol eder).
2.) Installed. (Programın ne zaman yüklendiğini kontrol eder).
3.) Expired. (Deneme süresinin bittiğini belirten bir mesajı gösterir).
4.) DaysLeft. ("Programı denemek için % gününüz kaldı" mesajını gösterir).
5.) Halt. (Programdan çıkar).
6.) Main. (Ana program).

Bu prosedürleri kullanarak, Time Trial (zamana bağlı demo) korumalı bir programın yaklaşık olarak ortaya çıkacak asm kodu şöyle olacaktır:

00000001 :Call GetSystemTime.
00000002 :Call Installed.
00000003 :if (GetSystemTime - Installed) eğer 30 günden fazlaysa...
00000004 : Call Expired,
00000005 : Jmp Halt.
00000006 :30 günden fazla değilse...
00000007 : Call DaysLeft,
00000008 : Jmp Main.

Gerçek bir kodu incelediğimizde işe şuna benzer:
Call 041829B0 (GetSystemTime)
Call 0492832C (Installed)
Cmp Ax,Bx (if koşulu)
JL 04927435 (ax ve bx değerlerine göre Jump ya da No Jump)
Call 04348234 (Expired=deneme süresi sona erdi)
Jmp 0432833C (Halt=programdan çık)
---JL Address---
Call 04583BC0 (Kalan gün mesajı)
Jmp 042392BC (Ana Program)

Eğer yukarıdaki koda bakacak olursanız programın çalışma şekli JL emrinden önceki ax ve bx değerlerine dayanıyor. Buradaki problem ise şu; büyük bir kodun disassemble edilişinden sonra patchlemek için doğru yeri bulmak zor, çünkü bu tür kodlarda bir çok cmp/jl veya cmp/jne oluşumları bulunmakta. E peki doğru yeri nasıl bulacağız ?¿

Yama Yapılacak Yer
--------------------------------------------------
Yukarıdaki kodu kullanarak ortaya 2 farklı program yolu çıkartabliriz. Hala 30 günlük deneme süresi içindeyken, programın takip ettiği yol şuna benzeyecektir:

GetSystemTime
Installed
Cmp ax,bx
JL (Jump)
DaysLeft
Main.
Deneme süresi sona erdiğinde ise kod şuna benzeyecektir:
GetSystemTime
Installed
Cmp ax,bx
JL ( No Jump )
Expired
Halt.
Bu iki listeye bakarsak JL komutuna kadar herşeyin aynı olduğunu görürüz; ama JL de ilk liste atlamayı yaparken 2. liste bizi programın sonuna getiriyor. JL komutu ax ve bx değerlerine bağlı. Eh Zamana bağlı program kilidini kaldırmak içinse bizim yapmamız gereken ya ax ve bx in değerlerini değiştirerek (doğru yöntem) sürekli bir deneme süresine sahip olmak ya da JL komutunu Jmp komutu ile değiştirip programın ilk call flow daki gibi çalışmasını sağlamak olacaktır.

Uygulama --------------------------------------------------
Önce, softice la birlikte install edilmiş olan symbol loader i yükleyin. Bunu görev çubuğundaki klasörden açabilirsiniz. Symbol Loader’daki file menüsüne gidin ve `open module` a tıklayın. Burdan da gidip kırmak istediğiniz programın ana çalıştırma dosyasına tıklayın (örn: mirc için mirc32.exe). Bu hallolduktan sonra `Module` menüsüne gidin ve "Load Module" a tıklayın. Normalde bu sizi bir hata mesajıyla karşılayacaktır, `Yes` e tıklayıp yüklemeye devam edelim. Şimdi SoftIce, symbol loader nedeniyle araya girecek ve bize aşağıdaki gibi birçok satır gösterecektir:

FFFF INVALID
FFFF INVALID
FFFF INVALID
FFFF INVALID
FFFF INVALID
.
.
.
Bunu umursamayın, bu bir hata değil. SoftIce, sadece hafızadaki henüz çözemediği bir bölümü gösteriyor. Şimdi SoftIce i yapmak istediğimiz şeye göre ayarlamanın zamanı geldi.

Kod Penceresi
--------------------------------------------------
Softice’ta "wc" yazın. Bu komut kod penceresini kontrol eder. Biz kod penceresinin gözükmesini istemiyoruz, o zaman kapalı olmasını bu şekilde sağlayalım. Bunu aynı zamanda mouse u kullanarak da yapabiliriz. Kapamak istediğiniz pencerenin üst köşesine mouse ile tıklayıp sürükleyebildiğiniz kadar yukarıya sürükleyin, bu pencerenin kapanmasını sağlayacaktır.

GeTSystemTime Için breakpoint
--------------------------------------------------
Şimdi GetSystemTime (O anki tarih ve saati göstermek için kullanılan birçok api komutundan biri.) için bir breakpoint koymalıyız. Bunu komut penceresinde "Bpx GetSystemTime" yazarak sağlıyoruz. -Bu arada, GetSystemTime sadece fonksiyonun adresini belirtecek bize. Fonksiyonun adresini bilseydik "Bpx 004283CD" gibi bir şey de yazabilirdik. Bu da demek oluyor ki bpx komutuna bir offset te ekleyebiliriz; örn: "Bpx GetSystemTime +4". Bu fonksiyonun başlangıcından 4 offset sonra softice in devreye gireceğini gösterir.- Neyse bu örnek için "Bpx GetSystemTime" yazdık.

Programın Yüklenmesi
--------------------------------------------------
Softice’ta breakpointi (BPX GetSystemTime) ayarladığımıza göre programın yüklenmesine ve çalışmasına devam etmek için izin verme zamanımız geldi. Yapmanız gereken CTRL ve D ye tuşlarına basmak. Program yüklenmeye ve çalışmaya devam ederken ’GetSystemTime’ komutunu işleyecektir. Bu olduğunda, Softice belirecek ve programı Fonksiyonun başında durduracaktır. Komut penceresinde ise ’BPX due to KERNEL32!GetSystemTime’ yazısını göreceksiniz. İşte şimdi olayı kaydetmeye başlamak için doğru yerdeyiz.

Fonksiyon Geç
--------------------------------------------------
Şimdi ’GetSystemTime’ fonksiyonunun başlangıcındayız. Bu fonksiyonu atlamalıyız ki tüm fonksiyon işlendikten hemen sonra yeralan asm komutuna varalım. (Not: ’GetSystemTime’ fonksiyonu windowssystem dizininde bulunan Kernel32.dll’nin bir parçasıdır). -Bu fonksiyon bilgisayarın o anki durumundan bağımsız olarak herzaman aynı komutları işleyecektir bu yüzden bu komutları kaydetmemize gerek yok.- Fonksiyondan hemen sonraki asm komutuna atlamak için yapmamız gereken "F11" tuşuna BİR KERE basmak olacaktır. (birkere bastın di mi?, aferim...) İşte işler bu noktadan itibaren ilginç bir hal almaya başladı...

Nag Ekranına Kadar Olan Komutları Kaydet
--------------------------------------------------
Şimdi herşeyi kaydetmenin sırası geldi. Yapmanız gereken; `Programı kullanabilmek için % gününüz kaldı` txtini içeren Nag Ekranı çıkana kadar F10 tuşuna basarak kodun içinde adım adım ilerlemeniz. Dikkat ederseniz komut penceresinde işlenen tüm kodun belireceğini görürsünüz. Tüm bu bilgi Softice Buffer’ında kaydediliyor.

Log Dosyası Kaydı
--------------------------------------------------
Nag ekranı çıktığında, ilk log dosyamızı kaydetmenin zamanı geldi demektir. Yapmanız gereken hala yüklü olan Softice Symbol Loader a giderek File menüsünden `Save softice history as...` e tıklamak. Şimdi bu dosyayı matador1.txt diye kaydettik. Bu dosyayı bir text editörle açacak olursanız komut penceresindeki tüm olanların kaydedilmiş olduklarını göreceksiniz. Bu bizim "İlk Call Flow" dosyamız.

Tarihi Ileri Atlat
--------------------------------------------------
Şimdi yapmamız gereken 2. bir call flow logu hazırlamak, ama bu sefer sistemimizin tarihini ileriye almalıyız ki o mide bulandırıcı "Deneme Süreniz Sona Erdi, Bayılın Bakalım Parayı..." mesajını görebilelim. Bu, programımızın ’GetSystemTime’ fonksiyonundan sonra ama Nag ekranı çıkmadan önce farklı bir yol izlemesine neden olacaktır.

Log Dosyalarını Karşılaştır
--------------------------------------------------
Tüm adımları tekrarladıktan ve 2. log dosyasını (örn:matador2.txt) kaydettikten sonra bunları karşılaştırma zamanı geldi demektir. Aşağıda, sıkı korunulduğu! söylenen bir Micro$oft programını kullanarak ortaya çıkan 2 örnek logu ekledim:

Log Dosyası 1
--------------------------------------------------

Break due to BPX KERNEL32!GetSystemTime (ET=33.15 milliseconds)
Break due to G (ET=383.02 microseconds)
015F:78026B90 663B0512870378 CMP AX,[78038712]
015F:78026B97 756B JNZ 78026C04 (JUMP )
015F:78026C04 8D8534FFFFFF LEA EAX,[EBP-00CC]
015F:78026C0A 50 PUSH EAX
015F:78026C0B FF1540D10278 CALL [KERNEL32!GetTimeZoneInformation]
015F:78026C11 83F8FF CMP EAX,-01
015F:78026C14 7430 JZ 78026C46 (NO JUMP)
015F:78026C16 83F802 CMP EAX,02
015F:78026C19 7527 JNZ 78026C42 (NO JUMP)
015F:78026C1B 66837DCE00 CMP WORD PTR [EBP-32],00
015F:78026C20 7420 JZ 78026C42 (NO JUMP)
015F:78026C22 837DDC00 CMP DWORD PTR [EBP-24],00
015F:78026C26 741A JZ 78026C42 (NO JUMP)
015F:78026C28 6A01 PUSH 01
015F:78026C2A 58 POP EAX
015F:78026C2B 56 PUSH ESI
015F:78026C2C 57 PUSH EDI
015F:78026C2D 8D75E0 LEA ESI,[EBP-20]
015F:78026C30 BF08870378 MOV EDI,78038708
015F:78026C35 A5 MOVSD
015F:78026C36 A5 MOVSD
015F:78026C37 A5 MOVSD
015F:78026C38 A5 MOVSD
015F:78026C39 5F POP EDI
015F:78026C3A A300870378 MOV [78038700],EAX
015F:78026C3F 5E POP ESI
015F:78026C40 EB90 JMP 78026CD2 (JUMP )
015F:78026BD2 50 PUSH EAX
015F:78026BD3 0FB745FC MOVZX EAX,WORD PTR [EBP-04]
015F:78026BD7 50 PUSH EAX
015F:78026BD8 0FB745FA MOVZX EAX,WORD PTR [EBP-06]
015F:78026BDC 50 PUSH EAX
015F:78026BDD 0FB745F8 MOVZX EAX,WORD PTR [EBP-08]
015F:78026BE1 50 PUSH EAX
015F:78026BE2 0FB745F6 MOVZX EAX,WORD PTR [EBP-0A]
015F:78026BE6 50 PUSH EAX
015F:78026BE7 0FB745F2 MOVZX EAX,WORD PTR [EBP-0E]
015F:78026BEB 50 PUSH EAX
015F:78026BEC 0FB745F0 MOVZX EAX,WORD PTR[EBP-10]
015F:78026BF0 50 PUSH EAX
015F:78026BF1 E8EE000000 CALL 78026CE4
015F:78026BF6 8B4D08 MOV ECX,[EBP+08]
015F:78026BF9 83C41C ADD ESP,1C
015F:78026BFC 85C9 TEST ECX,ECX
015F:78026BFE 7402 JZ 78026C02 (NO JUMP)
015F:78026C00 8901 MOV [ECX],EAX
015F:78026C02 C9 LEAVE
015F:78026C03 C3 RET
015F:300D2072 83C404 ADD ESP,04
015F:300D2075 8D4C2410 LEA ECX,[ESP+10]
015F:300D2079 51 PUSH ECX
015F:300D207A FF15B4841030 CALL [301084B4]
015F:300D2080 83C404 ADD ESP,04
015F:300D2083 8BF0 MOV ESI,EAX
015F:300D2085 8D54243C LEA EDX,[ESP+3C]
015F:300D2089 B909000000 MOV ECX,00000009
015F:300D208E 8D7C2418 LEA EDI,[ESP+18]
015F:300D2092 8D442418 LEA EAX,[ESP+18]
015F:300D2096 52 PUSH EDX
015F:300D2097 50 PUSH EAX
015F:300D2098 F3A5 REPZ MOVSD
015F:300D209A E8E1FDFFFF CALL 300D1E80
015F:300D209F 83C408 ADD ESP,08
015F:300D20A2 85C0 TEST EAX,EAX
015F:300D20A4 7E19 JLE 300D20BF (JUMP )
015F:300D20BF 8D442460 LEA EAX,[ESP+60]
015F:300D20C3 8D4C2418 LEA ECX,[ESP+18]
015F:300D20C7 50 PUSH EAX
015F:300D20C8 51 PUSH ECX
015F:300D20C9 E8B2FDFFFF CALL 300D1E80
015F:300D20CE 83C408 ADD ESP,08
015F:300D20D1 85C0 TEST EAX,EAX
015F:300D20D3 7E33 JLE 300D2108 (JUMP )
015F:300D2108 6820D91630 PUSH 3016D920
015F:300D210D E83EFCFFFF CALL 300D1D50
015F:300D2112 83C404 ADD ESP,04
015F:300D2115 85C0 TEST EAX,EAX
015F:300D2117 7410 JZ 300D2129 (JUMP )
015F:300D2129 391D20D91630 CMP [3016D920],EBX
015F:300D212F 0F85D6010000 JNZ 300D230B (JUMP )
015F:300D230B 6A4C PUSH 4C
015F:300D230D 6824D91630 PUSH 3016D924
015F:300D2312 E8E9F9FFFF CALL 300D1D00
015F:300D2317 8B0D20D91630 MOV ECX,[3016D920]
015F:300D231D 83C408 ADD ESP,08
015F:300D2320 3BC1 CMP EAX,ECX
015F:300D2322 0F841DFEFFFF JZ 300D2145 (JUMP )
015F:300D2145 8D542418 LEA EDX,[ESP+18]
015F:300D2149 6848D91630 PUSH 3016D948
015F:300D214E 52 PUSH EDX
015F:300D214F E82CFDFFFF CALL 300D1E80
015F:300D2154 83C408 ADD ESP,08
015F:300D2157 85C0 TEST EAX,EAX
015F:300D2159 7D26 JGE 300D2181 (JUMP )
015F:300D2181 803DA480163003 CMP BYTE PTR [301680A4],03
015F:300D2188 0F876D010000 JA 300D22FB (NO JUMP)
015F:300D218E 8BAC24D0000000 MOV EBP,[ESP+000000D0]
015F:300D2195 C745009F860100 MOV DWORD PTR [EBP+00],0001869F
015F:300D219C A0A4801630 MOV AL,[301680A4]
015F:300D21A1 A801 TEST AL,01
015F:300D21A3 744B JZ 300D21F0 (NOJUMP)
015F:300D21A5 33C0 XOR EAX,EAX
015F:300D21A7 8D4C2418 LEA ECX,[ESP+18]
015F:300D21AB A0A5801630 MOV AL,[301680A5]
015F:300D21B0 51 PUSH ECX
015F:300D21B1 6824D91630 PUSH 3016D924
015F:300D21B6 8D3440 LEA ESI,[EAX*2+EAX]
015F:300D21B9 C1E603 SHL ESI,03
015F:300D21BC E85FFDFFFF CALL 300D1F20
015F:300D21C1 83C408 ADD ESP,08
015F:300D21C4 3BC3 CMP EAX,EBX
015F:300D21C6 0F8C2F010000 JL 300D22FB (NO JUMP)
015F:300D21CC 3BC6 CMP EAX,ESI
015F:300D21CE 7C0A JL 300D21DA (NO JUMP)
015F:300D21D0 BB04000000 MOV EBX,00000004
015F:300D21D5 E9E6000000 JMP 300D22C0 (JUMP )
015F:300D22C0 8B4500 MOV EAX,[EBP+00]
015F:300D22C3 33C9 XOR ECX,ECX
015F:300D22C5 8A0DA9801630 MOV CL,[301680A9]
015F:300D22CB 3BC1 CMP EAX,ECX
015F:300D22CD 7F05 JG 300D22D4 (JUMP )
015F:300D22D4 6A4C PUSH 4C
015F:300D22D6 6824D91630 PUSH 3016D924
015F:300D22DB E820FAFFFF CALL 300D1D00
015F:300D22E0 83C408 ADD ESP,08
015F:300D22E3 A320D91630 MOV [3016D920],EAX
015F:300D22E8 6820D91630 PUSH 3016D920
015F:300D22ED E80EFBFFFF CALL 300D1E00
015F:300D22F2 83C404 ADD ESP,04
015F:300D22F5 85C0 TEST EAX,EAX
015F:300D22F7 8BC3 MOV EAX,EBX
015F:300D22F9 7505 JNZ 300D2 300 (JUMP )
015F:300D2300 5F POP EDI
015F:300D2301 5E POP ESI
015F:300D2302 5D POP EBP
015F:300D2303 5B POP EBX
015F:300D2304 81C4BC000000 ADD ESP,000000BC
015F:300D230A C3 RET
015F:3000ADB6 8BF0 MOV ESI,EAX
015F:3000ADB8 83C404 ADD ESP,04
015F:3000ADBB 8D46FF LEA EAX,[ESI-01]
015F:3000ADBE 83F805 CMP EAX,05
015F:3000ADC1 773D JA 3000AE00 (NO JUMP)
Log Dosyası 2
--------------------------------------------------

KERNEL32!GetSystemTime
Break due to G (ET=380.57 microseconds)
015F:78026B8C 668B45EA MOV AX,[EBP-16]
015F:78026B90 663B0512870378 CMP AX,[78038712]
015F:78026B97 756B JNZ 78026C04 (JUMP )
015F:78026C04 8D8534FFFFFF LEA EAX,[EBP-00CC]
015F:78026C0A 50 PUSH EAX
015F:78026C0B FF1540D10278 CALL [KERNEL32!GetTimeZoneInformation]
015F:78026C11 83F8FF CMP EAX,-01
015F:78026C14 7430 JZ 78026C46 (NO JUMP)
015F:78026C16 83F802 CMP EAX,02
015F:78026C19 7527 JNZ 78026C42 (NO JUMP)
015F:78026C1B 66837DCE00 CMP WORD PTR [EBP-32],00
015F:78026C20 7420 JZ 78026C42 (NO JUMP)
015F:78026C22 837DDC00 CMP DWORD PTR [EBP-24],00
015F:78026C26 741A JZ 78026C42 (NO JUMP)
015F:78026C28 6A01 PUSH 01
015F:78026C2A 58 POP EAX
015F:78026C2B 56 PUSH ESI
015F:78026C2C 57 PUSH EDI
015F:78026C2D 8D75E0 LEA ESI,[EBP-20]
015F:78026C30 BF08870378 MOV EDI,78038708
015F:78026C35 A5 MOVSD
015F:78026C36 A5 MOVSD
015F:78026C37 A5 MOVSD
015F:78026C38 A5 MOVSD
015F:78026C39 5F POP EDI
015F:78026C3A A300870378 MOV [78038700],EAX
015F:78026C3F 5E POP ESI
015F:78026C40 EB90 JMP 78026CD2 (JUMP )
015F:78026BD2 50 PUSH EAX
015F:78026BD3 0FB745FC MOVZX EAX,WORD PTR [EBP-04]
015F:78026BD7 50 PUSH EAX
015F:78026BD8 0FB745FA MOVZX EAX,WORD PTR [EBP-06]
015F:78026BDC 50 PUSH EAX
015F:78026BDD 0FB745F8 MOVZX EAX,WORD PTR [EBP-08]
015F:78026BE1 50 PUSH EAX
015F:78026BE2 0FB745F6 MOVZX EAX,WORD PTR [EBP-0A]
015F:78026BE6 50 PUSH EAX
015F:78026BE7 0FB745
 

gokhan_rs

New member
Ters mühendislik için apileri iyi bilmek gerek, assembly dili ve assembly dışında bir programlama dili bilmek gerek kolay iş değil...
 

nera1608

New member
arkadasım bende lisanslı aldığım ve kullandığım bir hasta kayıt programı var şirket batmış yeni bir pc aktarmak istedim yazılımı lisans key i kabul etmiyor şimdi kaldım ortada bana yardımcı olabilirmisin
 

hakansazci

New member
evet bunun devamını bekliyoruz bende iyi bir crak yapımcısı olmak istiyorm hakansazci @hotmail.com bana bu konuda ders veren olursa sevinirim iyi calısmalar
 

HTML

Üst