Realizując stopniową rozbudowę mojego obfuskatora dla Javy – JObfuscatora, dodałem nową strategię do zaciemniania kodu.
Polega ona na tym, że dla każdej metody pobierane są wszystkie możliwe wartości liczbowe (o ile nie kłóci się to ze składnią języka Java), które następnie przenoszone są do tablic.
https://www.pelock.com/pl/jobfuscator/
To sprawia, że analiza jest trudniejsza, ponieważ wymaga wyszukiwania po indeksach w tabeli każdej wartości numerycznej. Jeśli kiedykolwiek analizowałeś skompilowany kod, wiesz, że wartości zapisane w tablicach i odczytywane po indeksach sprawiają trudności w zrozumieniu, jaka wartość kryje się faktycznie w tablicy.
Razem z tą nową funkcjonalnością, zostały zaktualizowane pakiety SDK obfuskatora (dla PHP i Pythona) oraz pakiety dla Windows i Linuxa.
https://www.pelock.com/pl/produkty/jobfuscator/api
https://www.pelock.com/pl/produkty/jobfuscator/pobierz
Przykładowy kod Javy po zaciemnianiu czy też obfuskacji:
////////////////////////////////////////////////////////////////////////////////
//
// An output from JObfuscator v1.01 - Bartosz Wójcik
//
// Website : https://www.pelock.com/products/jobfuscator
// Version : v1.01
// Params : /MixCodeFlow /RenMethods /RenVars /ShuffleMethods /CryptStr /IntsToArray
// New lines : Windows (CRLF - \r\n)
// Date : 29.07.2021
//
////////////////////////////////////////////////////////////////////////////////
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone {
public static void main(String[] args) {
int[] _a4joq_o8b_tUOPFS_YaaYlTU = { 25, 781851063, 0, 186043733, 308536662, 2099166591, 65535 };
int sSlkJY4h_2s0_1o_z_PAe = _a4joq_o8b_tUOPFS_YaaYlTU[2];
double pA6la_BMPq7e_41T_ = 0;
double[] mXJrn_ywhskgJT0__c = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
sSlkJY4h_2s0_1o_z_PAe = _a4joq_o8b_tUOPFS_YaaYlTU[4];
while (sSlkJY4h_2s0_1o_z_PAe != 2099166591) {
switch(sSlkJY4h_2s0_1o_z_PAe) {
case 904343992:
String var_798 = "";
int[] __HoJ2lBVb_XLauhwa = { 0x0053, 0x0075, 0x0063, 0x0071, 0x0068, 0x0066, 0x0078, 0x006B, 0x0028, 0x004D, 0x006F, 0x0081, 0x0075, 0x006E, 0x0082, 0x0078, 0x007F, 0x007F, 0x0032, 0x0050, 0x0034, 0x003A, 0x0044, 0x004D, 0x007E };
for (int DQYVAM = 0, g_pIlsvecdqKrqqcjTotyogafe = 0; DQYVAM < _a4joq_o8b_tUOPFS_YaaYlTU[0]; DQYVAM++) {
g_pIlsvecdqKrqqcjTotyogafe = __HoJ2lBVb_XLauhwa[DQYVAM];
g_pIlsvecdqKrqqcjTotyogafe -= DQYVAM;
var_798 += (char) (g_pIlsvecdqKrqqcjTotyogafe & _a4joq_o8b_tUOPFS_YaaYlTU[6]);
}
System.out.format(var_798, pA6la_BMPq7e_41T_);
sSlkJY4h_2s0_1o_z_PAe = _a4joq_o8b_tUOPFS_YaaYlTU[5];
break;
case 1090387725:
pA6la_BMPq7e_41T_ = PknrplwspWzftaZejcnrx(mXJrn_ywhskgJT0__c);
sSlkJY4h_2s0_1o_z_PAe -= _a4joq_o8b_tUOPFS_YaaYlTU[3];
break;
case 308536662:
double[] var_3179 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
sSlkJY4h_2s0_1o_z_PAe -= -_a4joq_o8b_tUOPFS_YaaYlTU[1];
break;
}
}
}
public static double PknrplwspWzftaZejcnrx(double[] numArray) {
int[] yqAA2v4_8wxeB__XX0 = { 239790208, 0, 2003280558, 1806986744, 1639573144, 144062149, 2, 1567196536, 220961938, 834696410 };
int pVtkndrLgwazueYclthlx = yqAA2v4_8wxeB__XX0[1];
double var_2075 = 0;
int var_2673 = 0;
double GOSLX = 0, BWSIM_HPGKSCO = 0;
pVtkndrLgwazueYclthlx = yqAA2v4_8wxeB__XX0[2];
while (pVtkndrLgwazueYclthlx != yqAA2v4_8wxeB__XX0[3]) {
switch(pVtkndrLgwazueYclthlx) {
case 1639573144:
var_2075 = GOSLX / var_2673;
pVtkndrLgwazueYclthlx += -yqAA2v4_8wxeB__XX0[8];
break;
case 961954335:
for (double SQZGBDCX_NPDPSRK_NMYXHDJC : numArray) {
GOSLX += SQZGBDCX_NPDPSRK_NMYXHDJC;
}
pVtkndrLgwazueYclthlx = yqAA2v4_8wxeB__XX0[4];
break;
case 1567196536:
pVtkndrLgwazueYclthlx -= -yqAA2v4_8wxeB__XX0[0];
break;
case 1418611206:
for (double ZWGMm8X_5d_8buIiNh_x_h : numArray) {
BWSIM_HPGKSCO += Math.pow(ZWGMm8X_5d_8buIiNh_x_h - var_2075, yqAA2v4_8wxeB__XX0[6]);
}
pVtkndrLgwazueYclthlx = yqAA2v4_8wxeB__XX0[7];
break;
case 144062149:
var_2673 = numArray.length;
pVtkndrLgwazueYclthlx ^= yqAA2v4_8wxeB__XX0[9];
break;
case 2003280558:
BWSIM_HPGKSCO = 0.0;
pVtkndrLgwazueYclthlx = yqAA2v4_8wxeB__XX0[5];
break;
}
}
return Math.sqrt(BWSIM_HPGKSCO / var_2673);
}
}
Jeśli macie jakieś ciekawe pomysły na inne obfuskacje w kodzie źródłowym – dajcie znać, czekają na was darmowe kody aktywacyjne.