Szyfrowanie losowymi metodami tekstów, ciągów tekstowych i plików w kodach źródłowych wraz z generowaniem kodu deszyfrującego w wybranym języku programowania.
Sam jestem programistą, kocham programować. Oprócz tego zajmuję się również inżynierią wsteczną oprogramowania. W swojej pracy wykonuję szereg analiz kodu zamkniętego i skompilowanego oprogramowania. Czasami znajduję w skompilowanych aplikacjach rzeczy, które nie powinny być widoczne na pierwszy rzut oka dla każdego, kto wie jak skorzystać z hex edytora.
Poniżej kilka przykładów, niektóre z tych rzeczy nie powinny być nawet umieszczone w aplikacjach (złe założenia projektowe), ale obecność innych jest czasami nieunikniona.
Wszystkie te rzeczy w nieodpowiednich rękach mogą być wykorzystane przeciwko twojemu oprogramowaniu i otaczającej go infrastrukturze.
 
				Dla przykładu weźmy hasła do baz danych. Mogą być użyte przez twoją konkurencję do przeglądania struktury twojej bazy danych, czy zrzucenia całej jej zawartości. Cała ciężka praca idzie na marne, tylko dlatego, że ktoś podejrzał hasło zapisane jawnym tekstem w aplikacji korzystając z prostego hex edytora.
Postanowiłem stworzyć prostą usługę o nazwie String Encrypt dla programistów, która pozwala na szybkie szyfrowanie tekstów (ciągów tekstowych) i plików bez konieczności tworzenia specjalnych narzędzi szyfrujących do tego celu.
String Encrypt pozwoli Ci ukryć rzeczy, które nie powinny być widoczne dla pierwszej z brzegu osoby z hex edytorem.
Usługa posiada interfejs Web API pozwalający zautomatyzować proces szyfrowania danych np. każdorazowo przy kompilacji twojego projektu.
Lubię prostotę i String Encrypt jest bardzo łatwy w użyciu. Wystarczy tylko, że:
String Encrypt używa każdorazowo losowego kodu szyfrującego i przykładowy rezultat może wyglądać tak dla obsługiwanych języków programowania:
// zaszyfrowane przez www.stringencrypt.com (v1.0.0) [C/C++]
// szSecret = "Hello World!"
wchar_t szSecret[13] = { 0xB13D, 0xB159, 0xB15F, 0xB160, 0xB168, 0xB11A, 0xB152, 0xB169,
			 0xB15F, 0xB16A, 0xB14F, 0xB10B, 0xB0F1 };
for (unsigned int fstHM = 0, TLuIA = 0; fstHM < 13; fstHM++)
{
	TLuIA = szSecret[fstHM];
	TLuIA = ~TLuIA;
	TLuIA --;
	TLuIA = ~TLuIA;
	TLuIA -= 0xA90C;
	TLuIA ^= fstHM;
	TLuIA += 0xF816;
	szSecret[fstHM] = TLuIA;
}
wprintf(szSecret);// zaszyfrowane przez www.stringencrypt.com (v1.0.0) [C#]
// szSecret = "Hello World!"
String szSecret = "\uFFB6\uFF99\uFF92\uFF92\uFF8F\uFFDE\uFFA7\uFF8F\uFF8C\uFF92\uFF9A\uFFDD";
for (int hcGUs = 0, JBonk = 0; hcGUs < 12; hcGUs++)
{
	JBonk = szSecret[hcGUs];
	JBonk ++;
	JBonk = ~JBonk;
	JBonk -= hcGUs;
	JBonk += hcGUs;
	szSecret = szSecret.Substring(0, hcGUs) + (char)(JBonk & 0xFFFF) + szSecret.Substring(hcGUs + 1);
}
MessageBox.Show(szSecret);// zaszyfrowane przez www.stringencrypt.com (v1.0.0) [Delphi / Pascal]
var
  // szSecret = "Hello World!"
  szSecret: array[0..13] of WideChar;
  YhZsX: Integer;
  XMSIh: Integer;
begin
  szSecret[12] := WideChar($421E); szSecret[3] := WideChar($427D);
  szSecret[10] := WideChar($427C); szSecret[4] := WideChar($4285);
  szSecret[1] := WideChar($4276); szSecret[5] := WideChar($4237);
  szSecret[6] := WideChar($426F); szSecret[7] := WideChar($4286);
  szSecret[2] := WideChar($427C); szSecret[0] := WideChar($425A);
  szSecret[8] := WideChar($428C); szSecret[11] := WideChar($4238);
  szSecret[9] := WideChar($4277);
  for XMSIh := 0 to 13 do
  begin
    YhZsX := Ord(szSecret[XMSIh]);
    YhZsX := YhZsX xor XMSIh;
    YhZsX := not YhZsX;
    YhZsX := YhZsX + $4212;
    YhZsX := not YhZsX;
    szSecret[XMSIh] := WideChar(YhZsX);
  end;
  ShowMessage(szSecret);// zaszyfrowane przez www.stringencrypt.com (v1.0.0) [Java]
// szSecret = "Hello World!"
String szSecret = "\uD161\uD14B\uD143\uD144\uD142\uD18E\uD178\uD13F" +
		  "\uD153\uD14E\uD143\uD181";
for (int PznwK = 0, NKJoC = 0; PznwK < 12; PznwK++)
{
	NKJoC = szSecret.charAt(PznwK);
	NKJoC -= PznwK;
	NKJoC += PznwK;
	NKJoC ++;
	NKJoC ^= PznwK;
	NKJoC += 0x16BF;
	NKJoC ^= 0xE869;
	szSecret = szSecret.substring(0, PznwK) + (char)(NKJoC & 0xFFFF) + szSecret.substring(PznwK + 1);
}
System.out.println(szSecret);<script type="text/javascript">
// zaszyfrowane przez www.stringencrypt.com (v1.0.0) [JavaScript]
// szSecret = "Hello World!"
var szSecret = "\uD2B6\uD29C\uD298\uD297\uD2B1\uD309\uD2CB\uD298\uD298\uD2B1\uD2C8\uD302";
for (var cXIBk = 0, fyBrc = 0; cXIBk < 12; cXIBk++)
{
	fyBrc = szSecret.charCodeAt(cXIBk);
	fyBrc += 0x26EE;
	fyBrc ^= 0x0613;
	fyBrc = ~fyBrc;
	fyBrc += cXIBk;
	fyBrc ^= cXIBk;
	fyBrc -= cXIBk;
	szSecret = szSecret.substr(0, cXIBk) + String.fromCharCode(fyBrc & 0xFFFF) + szSecret.substr(cXIBk + 1);
}
alert(szSecret);
</script># zaszyfrowane przez www.stringencrypt.com (v1.0.0) [Python]
# szSecret = "Hello World!"
szSecret = [ 0x0046, 0x0061, 0x006E, 0x006C, 0x006D, 0x0020, 0x0055, 0x005F,
             0x0070, 0x006C, 0x0066, 0x0021 ]
for WRUGp in range(12):
  BMbPZ = szSecret[WRUGp]
  BMbPZ += 1
  BMbPZ ^= WRUGp
  BMbPZ += 1
  BMbPZ ^= WRUGp
  szSecret[WRUGp] = BMbPZ
szSecret = ''.join(chr(BMbPZ & 0xFFFF) for BMbPZ in szSecret)
del WRUGp, BMbPZ
print(szSecret)-- zaszyfrowane przez www.stringencrypt.com (v1.0.0) [Haskell]
module Main where
import qualified Data.Char
import qualified Data.Bits
main = do
  putStrLn $ szSecret
-- szSecret = "Hello World!"
szSecret = zipWith f [0..] [ 0x751D, 0x753C, 0x7531, 0x7537, 0x753E, 0x754F, 0x7512, 0x753A,
                             0x7527, 0x7533, 0x7549, 0x7588 ]
  where
    f pahnq frsop = let wpsnl0 = frsop
                        wpsnl1 = wpsnl0 `Data.Bits.xor` pahnq
                        wpsnl2 = wpsnl1 + 1
                        wpsnl3 = wpsnl2 - pahnq
                        wpsnl4 = Data.Bits.complement wpsnl3
                        wpsnl5 = wpsnl4 `Data.Bits.xor` 0x8AA6
                        wpsnl6 = wpsnl5 + 1
                    in Data.Char.chr (wpsnl6 Data.Bits..&. 0xFFFF); zaszyfrowane przez www.stringencrypt.com (v1.0.0) [MASM Assembler (32 bit)]
.data
	; szSecret = "Hello World!"
	szSecret dw 0D7B3h, 0D799h, 0D791h, 0D792h, 0D798h, 0D7E0h, 0D7B6h, 0D7A1h, 0D791h, 0D7A8h, 0D7A1h, 0D7E7h, 0D807h
.code
	mov	ecx, offset szSecret
	mov	eax, 13
	sub	edx, edx
@@:
	mov	bx, word ptr [ecx + edx]
	add	ebx, 02804h
	sub	ebx, edx
	not	ebx
	add	ebx, edx
	xor	ebx, edx
	mov	word ptr [ecx + edx], bx
	inc	edx
	dec	eax
	jne	@b
	push	0
	push	ecx
	push	ecx
	push	0
	call	MessageBoxW; zaszyfrowane przez www.stringencrypt.com (v1.0.0) [FASM Assembler (32 bit)]
section '.data' data readable writable
	; szSecret = "Hello World!"
	szSecret dw 09AD0h, 09AF5h, 09AFCh, 09AFCh, 09AF9h, 09A88h, 09AC1h, 09AF7h
		 dw 09AF6h, 09AFCh, 09AC4h, 09A89h, 06568h
section '.text' code readable executable
	mov	ebx, szSecret
	mov	eax, 13
	and	edx, 0
@@:
	mov	cx, word [ebx + edx]
	xor	ecx, 09A97h
	xor	ecx, edx
	inc	ecx
	add	ecx, edx
	mov	word [ebx + edx], cx
	inc	edx
	dec	eax
	jne	@b
	push	0
	push	ebx
	push	ebx
	push	0
	call	[MessageBoxW]Szyfrowanie tekstów i plików to tylko jedna warstwa zabezpieczeń. Być może zainteresuje Cię również moje rozwiązanie do ochrony oprogramowania — PELock. Pomoże Ci w ochronie twojego oprogramowania nawet przed ludźmi z dużym doświadczeniem w inżynierii wstecznej i crackerami.
Jeśli chciałbyś mnie zapytać o usługę String Encrypt, coś nie jest do końca jasne, napisz do mnie, z miłą chęcią Ci pomogę.