Bu kodun çalışmama sebebi nedir ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
seci20

Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen seci20 »

arkadaşlar merhaba aşşağıdaki kod hatada vermiyor ama işlemde yapmıyor.Amacım hex adresini ilk olarak dosyada aratıp buldugu hex adresini değiştirmek ama bir türlü başaramadım...

NOT:ARKADAŞLAR KESİNLİKLE CRACK VB. BİŞE YAPILMICAK.ANDROİD DOSYASI DEĞİŞTİRİLİCEK.DEĞİŞTİRİLEN DOSYA AĞ ONARMAYA YARIYOR YANİ KIMSENİN EMEĞİNE GİRMİYORUM.

Kod: Tümünü seç

procedure FindAndReplaceHex(const Filename: string; FindHexStr, ReplaceHexStr: array of byte);
var
  FS : TFileStream;
  sFind,
  sReplace,
  buffer : string;
  i : integer;
begin
  SetLength(sFind, Length(FindHexStr));
  if Length(sFind) > 0 then
    for i := 0 to High(FindHexStr) do
      sFind[i +1] := char(FindHexStr[i]);

  SetLength(sReplace, Length(ReplaceHexStr));
  if Length(sReplace) > 0 then
    for i := 0 to High(ReplaceHexStr) do
      sReplace[i +1] := char(ReplaceHexStr[i]);

  if sFind <> sReplace then begin
    FS := TFileStream.Create(Filename, fmOpenReadWrite or fmShareDenyWrite);
    try
      FS.Position := 0;
      SetLength(buffer, FS.Size);
      FS.Read(buffer[1], FS.Size);

      buffer := StringReplace(buffer, sFind, sReplace, rfReplaceAll);
      FS.Size := Length(buffer);
      FS.Position := 0;
      if Length(buffer) > 0 then
        FS.Write(buffer[1], Length(buffer));

    finally
      FS.Free;
    end;
  end;
end;
kullanımı.

Kod: Tümünü seç

FindAndReplaceHex(AFilename, [$90, $90, $90], [$10, $10, $10]);
ama malasef çalıştıramadım bir türlü hatada vermiyor dosyayıda çekiyor ama değiştirme işlemi yapmıyor malasef yardımlarınızı beklıyorum çok teşekkür ederim...
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen AliZairov »

seci20 yazdı: ANDROİD DOSYASI DEĞİŞTİRİLİCEK. DEĞİŞTİRİLEN DOSYA AĞ ONARMAYA YARIYOR.
Merhaba. Biraz detay verirseniz HEX yerine daha kolay bir yöntemle yapmak istenilen işlemi yapmakta yardımcı oluruz.
seci20

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen seci20 »

şimdi belli bir hex adresi var elimde ama bu her telefonda değişiyor.Ben bu elimdeki hex adresini aratıp buldugum hex adresini değiştirmek istiyorum.Yani söyle açıklıyayım resımlı sekılde.

mesela değiştirmek istediğim hex dosyası bu dosyada burada.

Resim


ama diğer telefondaki aynı dosyadada buraya kaymış.

Resim


ben ilk resimde belirlediğim hex adresini bulur değiştirmek istiyorum.Her dosyadada sabit adresi olmadıgı ıcın bulup değiştirmemin sebebi bu.Yani elimde değiştirmem gerek hex adresi var nasıl değiştiriceğimide biliyorum ama her telefonda hex adresi değiştiriği için aratıp bulup değiştirmem gerekli.Yukardaki kod aslında tam istediğimi anlatıyor ama gel gelelimki değiştirmiyor hatada vermiyor.
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen AliZairov »

Tekrar merhaba. Her halde bu apk dosyasıdır. Bu adresi değişince elinize ne geçiyor?
seci20

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen seci20 »

AliZairov yazdı:Tekrar merhaba. Her halde bu apk dosyasıdır. Bu adresi değişince elinize ne geçiyor?
bu bir apk dosya değil bu libat.so dediğimiz bir dosya android versiyonu yukseltıldıgınde ağ gider bu dosyayı onararak ağı geri getirebilirsiniz...Benim hazırladığım program bu ve bunun benzeri işlemler için kullanılıyor...
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen SimaWB »

Sizin yazdığınız kod örneği string'lerle işlem yapıyor ama dosyanız binary. Yönteminiz tamamen yanlış maalesef. Açtığınız dosyayı bir string olarak ele almaktan vazgeçin. buffer değişkeniniz string yerine array of byte(TBytes) tarzı birşeyler olmalı. Kısaca okuma işlemini byte byte yapın, string olarak düşünmeyin.
There's no place like 127.0.0.1
seci20

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen seci20 »

SimaWB yazdı:Sizin yazdığınız kod örneği string'lerle işlem yapıyor ama dosyanız binary. Yönteminiz tamamen yanlış maalesef. Açtığınız dosyayı bir string olarak ele almaktan vazgeçin. buffer değişkeniniz string yerine array of byte(TBytes) tarzı birşeyler olmalı. Kısaca okuma işlemini byte byte yapın, string olarak düşünmeyin.
hocam oyle yapınca boyut belirmek gerekmiyormu ? bir örnek verme sansınız varmı acaba ?
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen SimaWB »

Aradığınız 3 byte = $90, $90,$90 ve yerleştirmek istediğiniz 3 byte = $10,$10,$10 kabul ediyorum:
  • Dosyayı yine FS (TFileStream) ile açın.
  • FS.Size ve FS.Position yardımı ile bir döngü içinde dosyayı byte byte okuyun.
  • Eğer okuduğunuz değer $90 ise sonraki 2 byte'ı okuyup $9090 olduğuna emin olun.
  • Her 1 byte okuma yapışınızda sizin dosya içindeki konumunuzun (FS.Position) 1 artacağını göz önünde bulundurun.
  • 3 defa $90'ı bulduğunuzda FS.Position'u 3 geri alıp FS.Write ile yazmak istediğiniz değeri yazın
Not: Gönderdiğiniz resimde 4 byte'lık işlem yapılacağı görülüyor. Eğer 4'er byte okuyarak aradığınızı bulacağınız kesinse bir Integer değişken tanımlayıp FS.Read içinde bu değişkeni kullanarak arama yaparsanız daha hızlı sonuç elde edersiniz.
There's no place like 127.0.0.1
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen hakanharbeli »

aynen öyle [$90, $90, $90] gibi bir ifade orada bulunamaz diye düşünüyorum. Ayrıca hex to string ve sonradan string to hex gibi bir yapı olsaydı ışınlanma icat olurdu. düşünsenize 20 gb lık bir dosyanın hex kodlarını string yapıp uzak pc ye yolluyorsunuz uzak pc de string to hex yapıp sonuçları exe olarak kaydediyor al sana ışınlanma.. (denedim olmadı oradan biliyorum) kısacası yöntem yanlış onu değiştirmek için hex editör companenti vardı herhalde onu araştırın hex editör yapmayı hedefleyenler vardı oradan yola çıkarak değiştirme yapabilirsiniz.
seci20

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen seci20 »

ustalarım bunu başaramadım ama ascii olarak degıstırmeyı denıyeyım dedım ama hex olarak #00 olan karakteri asciide bir türlü ceviremedim araya bu karakter girdikten sonra hiç bir yazı yazmıyor tamamen bos gozukuyor #00 karakterinden sonrasi.Bunu nasıl duzeltebılirım ?
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen SimaWB »

Kod üzerinde konuşmak daha kolay olur. Nasıl yapmaya çalıştığınıza bakalım, onun üzerinden gidelim.
There's no place like 127.0.0.1
seci20

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen seci20 »

hocam iki yöntem buldum iki yöntemde tam istediğim gibi ama ikisinide ben kendi acemiliğimden başaramadım.İlk yöntem şu şekilde.

değiştirmek istediğim adres şurası.ascii ve hex olarak

Resim

değişmiş halide bu olması gerekli.

Resim


normalda şu şekilde ascıı değiştirebiliyorum.

Kod: Tümünü seç

var Path, FullPath,a,b:ansistring;
begin
Path:= ExtractFilePath(Application.ExeName);
FullPath:= Path + 'temp';
a:=char($00)+'#^Ÿap@-é'+StringOfChar(#0, 1)+'@°á';
showmessage(String2Hex(a));
edit1.Text:=String2Hex(a);
showmessage(HexToString(edit1.Text));
b:=#01+#01+#01+#01+'#^Ÿa'+#01+' ãÿ/á';
showmessage(String2Hex(b));
edit1.Text:=String2Hex(b);
showmessage(HexToString(edit2.Text));
FileReplaceString(FullPath,HexToString(edit1.Text),HexToString(edit2.Text));
end;
ama gel gelelimki #01 olarak yazılan yerler yukardakı resımde belirtiğim gibi #00 olması gerekli ama #00 yaptıktan sonraki adresler delphide gözükmüyor hex olarak görüyorum ama ascii olarak gözükmüyor ansistiring yaptım gene göremedim.

birde böyle bir yöntem buldum ve işede yaradı ama bundada hangi komutla değiştireceğimi bulamadım.Eklentinin adı KHexEditor

linki:http://www.tkweb.eu/en/delphicomp/khexeditor.html

bu eklenti aslında tam işimi görücek bir eklenti hocam normal şu şekilde yükleyip üstünde normal oynama yaptıgımda geride kaydettiğimde sorunsuz şekilde değişiyor ve kaydediliyor ama kod olarak nasıl değiştirme komutu var bır turlu bulamadım yardım kısmında soyle bır komut var ama değiştirme yapmıyor.

bu şekilde yükleniyor ekrana.aynı memo gibi çok harika.

Resim

yardım kısmında söyle bir açıklamada bulunmuşlar.

Resim

ardından normal not defterı yapar gibi değiştiriyorum ve kayıt komutu verıyorum sorunsuz kayıt edıyor.Ama komut verip nasıl değiştiririm bir türlü bulamadım.yani komutta nasıl değiştiririm adresleri onu çözemedim.Şimdiden yardımlarınız ıcın cok teşekkur ederım hocam umarım acıklayıcı olmustur yazılarım.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen SimaWB »

Aşağıdaki fonksiyon işinizi görür tahmin ediyorum. Anlaşılmayan yer olursa yardımcı olmaya çalışırım:

Kod: Tümünü seç

procedure BulVeDegistir(const DosyaAdi: string; const Aranan, YeniData : array of byte);
var
  FS: TFileStream;
  i, j, SonPozisyon: integer;
  B: Byte;
  Bulundu: Boolean;
begin
  Bulundu := False;
  FS := TFileStream.Create(DosyaAdi, fmOpenReadWrite);
  try
    FS.Position := 0;
    for i := 0 to FS.Size-Length(Aranan)-1 do
    begin
      FS.Read(B, 1);
      if B = Aranan[0] then
      begin
        SonPozisyon := FS.Position;
        for j := 1 to Length(Aranan)-1 do
        begin
          Bulundu := True;
          FS.Read(B, 1);
          if (B <> Aranan[j]) then
          begin
            Bulundu := False;
            FS.Position := SonPozisyon;
            Break;
          end;
        end;
        if Bulundu then
        begin
          FS.Position := SonPozisyon-1;
          FS.WriteBuffer(YeniData, Length(YeniData));
          Break;
        end;
      end;
    end;
  finally
    FS.Free;
  end;
end;
There's no place like 127.0.0.1
seci20

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen seci20 »

SimaWB yazdı:Aşağıdaki fonksiyon işinizi görür tahmin ediyorum. Anlaşılmayan yer olursa yardımcı olmaya çalışırım:

Kod: Tümünü seç

procedure BulVeDegistir(const DosyaAdi: string; const Aranan, YeniData : array of byte);
var
  FS: TFileStream;
  i, j, SonPozisyon: integer;
  B: Byte;
  Bulundu: Boolean;
begin
  Bulundu := False;
  FS := TFileStream.Create(DosyaAdi, fmOpenReadWrite);
  try
    FS.Position := 0;
    for i := 0 to FS.Size-Length(Aranan)-1 do
    begin
      FS.Read(B, 1);
      if B = Aranan[0] then
      begin
        SonPozisyon := FS.Position;
        for j := 1 to Length(Aranan)-1 do
        begin
          Bulundu := True;
          FS.Read(B, 1);
          if (B <> Aranan[j]) then
          begin
            Bulundu := False;
            FS.Position := SonPozisyon;
            Break;
          end;
        end;
        if Bulundu then
        begin
          FS.Position := SonPozisyon-1;
          FS.WriteBuffer(YeniData, Length(YeniData));
          Break;
        end;
      end;
    end;
  finally
    FS.Free;
  end;
end;
hocam cevap verdiğiniz için çok teşekkür ederim.Acemiliğimi mahzur görün lakin bu prosedür tam olarak nasıl kullanılıyor onu cozemedım. şu şekilde sanırsam ama bir değişim olmadı malasef adreslerde ?

Kod: Tümünü seç

BulVeDegistir('AT',[00000000],[00000001]);
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Bu kodun çalışmama sebebi nedir ?

Mesaj gönderen SimaWB »

Kusura bakmayın ama sorun bence "acemilik"te değil, ARGE eksikliğinde :!:
Gönderdiğim fonksiyon sizin ilk gönderdiğiniz kodlarda bulunan FindAndReplaceHex fonksiyonuna benzemiyor mu?

Bence siz böyle bir projeden evvel Delphi'deki değişken tipleri üzerine biraz araştırma yapın. Mesela array of byte ne demek bir araştırın isterseniz. Böylece "array of byte" bekleyen bir fonksiyona [00000000] şeklinde değer göndermeye çalışmazsınız. Sizin gönderdiğiniz kodda "array of byte" olduğuna göre sizin bunu bildiğinizi varsaymıştım!

Sorduğunuz soruya cevaben neredeyse tam istediğinizi yapan bir cevap verdim. Bundan sonrası size kalmış. (Aslında size pek birşey kalmadı ama :( ) Allah yardımcınız olsun...
There's no place like 127.0.0.1
Cevapla