1 место «Со скриптами на ТЫ» | Часть 1 | Деобфускация JavaScript для начинающих

Разбираю creepJS, переопределяю функции, но попадаю в ошибку "failed "prototype" in function". Как я понимаю, это потому что в созданной мной функции есть свойство prototype, а в оригинале его нет. Есть ли возможность создать функцию без прототипа? delete с этим свойством не работает(
 
Есть ли возможность создать функцию без прототипа?
Да, как раз для таких моментов существует спецификация языка, которая говорит нам об этом:
86899

Под MethodDefinition подразумевается следующее(из той же спецификации):
86900

То есть создать функцию без свойства "prototype" можно как-то так:
JavaScript:
Развернуть Свернуть Копировать
//Вариант 1 | bind вернёт новую функцию без prototype
function f() {
    //...
}
const ff = f.bind(this) //Вместо 'this' нужный контекст
console.log('prototype' in ff); //false - то что нужно

//Вариант 2 | можем создать функцию у объекта и позаимствовать её
const obj = {
    f() {
        //...
    }
}
const ff = obj.f;
console.log('prototype' in ff); //false - снова то, что нам нужно

//Вариант 2.1 | то же самое, что и вариант 2, только для геттера/сеттера
const obj = {
    get f() {
        //...
    }
}
console.log('prototype' in Object.getOwnPropertyDescriptor(obj, 'f').get); //false - и снова замечательно

+ ещё стрелочные функции, но не думаю, что они будут интересны в данном случае
 
Последнее редактирование:
  • Спасибо
Реакции: Jambo
если есть что еще по теме - выкладывай, с удовольствием почитаем...
Прикреплять к самой статье не буду, так как не очень относится к деобфускации, но если вдруг кому интересно чем там выше занимался @Jambo делая такие штуки, то вот кое-что нашёл вам почитать для начала(последняя ссылка основная):
На английском, к сожалению, но увы, в рунете как-то подобные темы не очень освещены... С переводчиком пойдёт
 
Очень круто, автору большой респект.;-) Увидел на ютубе, посмотрел залпом, тема развёрнута очень доходчиво. Даже с моими начальными знаниями веб-разработчика, удалось достичь такого результата:
Посмотреть вложение 86714
Будем дальше разбираться :ay:
Здравствуйте, могу я вам помочь? Я тоже хочу решить проблему с тестом
 
delete (только написал и тут же в голову пришло решение. ладно, ап не лишним будет для такой статьи)
 
Последнее редактирование:
  • Спасибо
Реакции: rastvl
delete (только написал и тут же в голову пришло решение. ладно, ап не лишним будет для такой статьи)
Babel хорош в плане функционала, но с документацией у него всё плохо, поэтому зачастую приходится разбираться методом тыка.

Ну и вот я про клауд писал - https://habr.com/ru/articles/716434/ . Там тоже по деревьям гулял, может поможет.
А это просто по теме - https://habr.com/ru/articles/720588/
 
  • Спасибо
Реакции: volody00
Babel хорош в плане функционала, но с документацией у него всё плохо, поэтому зачастую приходится разбираться методом тыка.

Ну и вот я про клауд писал - https://habr.com/ru/articles/716434/ . Там тоже по деревьям гулял, может поможет.
А это просто по теме - https://habr.com/ru/articles/720588/

Почитал спасибо :)

Как насчёт x-client-data? ) это уже не js
 
Статья огонь)

Подскажите, а если на странице нет обфускации но переменные называются просто буквами a b e n и тд. Как работать с объектами вида
  1. ApolloLink: (...)
    [*]Observable: (...)
    [*]concat: (...)
    [*]createOperation: (...)
    [*]empty: (...)
    [*]execute: (...)
    [*]from: (...)
    [*]fromError: (...)
    [*]fromPromise: (...)
    [*]getOperationName: (...)
    [*]makePromise: (...)
    [*]split: (...)
    [*]toPromise: (...)
    [*]__esModule: true
    [*]Symbol(Symbol.toStringTag): "Module"
    [*]get ApolloLink: ƒ ()
    [*]get Observable: ƒ ()
    [*]get concat: ƒ ()
    [*]get createOperation: ƒ ()
    [*]get empty: ƒ ()
    [*]get execute: ƒ ()
    [*]get from: ƒ ()
    [*]get fromError: ƒ ()
    [*]get fromPromise: ƒ ()
    [*]get getOperationName: ƒ ()
    [*]get makePromise: ƒ ()
    [*]get split: ƒ ()
    [*]get toPromise: ƒ ()
    [*][[Prototype]]: Object
Вычислять значение каждой функции и метода?
 
Статья огонь)

Подскажите, а если на странице нет обфускации но переменные называются просто буквами a b e n и тд. Как работать с объектами вида
  1. ApolloLink: (...)
    [*]Observable: (...)
    [*]concat: (...)
    [*]createOperation: (...)
    [*]empty: (...)
    [*]execute: (...)
    [*]from: (...)
    [*]fromError: (...)
    [*]fromPromise: (...)
    [*]getOperationName: (...)
    [*]makePromise: (...)
    [*]split: (...)
    [*]toPromise: (...)
    [*]__esModule: true
    [*]Symbol(Symbol.toStringTag): "Module"
    [*]get ApolloLink: ƒ ()
    [*]get Observable: ƒ ()
    [*]get concat: ƒ ()
    [*]get createOperation: ƒ ()
    [*]get empty: ƒ ()
    [*]get execute: ƒ ()
    [*]get from: ƒ ()
    [*]get fromError: ƒ ()
    [*]get fromPromise: ƒ ()
    [*]get getOperationName: ƒ ()
    [*]get makePromise: ƒ ()
    [*]get split: ƒ ()
    [*]get toPromise: ƒ ()
    [*][[Prototype]]: Object
Вычислять значение каждой функции и метода?
Все верно. Зато один раз вычислишь, а дальше все будет понятно.
 
  • Спасибо
Реакции: SlipDez
Подскажите почему выскакивает эта ошибка


Error: Cannot find module 'E:\Deobf\index.js'
at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)
at Module._load (node:internal/modules/cjs/loader:922:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}

говорится что не может найти модули но все модули установил

package.json
JavaScript:
Развернуть Свернуть Копировать
{
  "name": "deobf",
  "version": "1.0.0",
    "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@babel/core": "^7.22.10",
    "@babel/generator": "^7.22.10",
    "@babel/parser": "^7.22.10",
    "@babel/traverse": "^7.22.10",
    "@babel/types": "^7.22.10"
  }
}
index.js пробовал также переименовать в index.mjs
JavaScript:
Развернуть Свернуть Копировать
// index.mjs
import { parse } from "@babel/parser";
import { traverse } from "@babel/traverse";
import generate from "@babel/generator";
import * as t from "@babel/types";
import fs from "fc";

const code = fs.readFileSync('original.js', { encoding: 'utf-8' });
const ast = parse(code);

console.log(ast);
original.js
JavaScript:
Развернуть Свернуть Копировать
console.log('Тест');


let k = 1 + 3;
return k ;

пробовал обновлять пакеты npm install
Устанавливал npm install @babel/core
Проверял что в terminal правильный путь
 
Последнее редактирование:
Отвратительная подача материала, какими то обучающим ролик (первый) точно назвать нельзя, просто рабочий процесс и мысли вслух.
 
Отвратительная подача материала, какими то обучающим ролик (первый) точно назвать нельзя, просто рабочий процесс и мысли вслух.
Благодаря этому отвратительному материалу большое количество человек научились делать то, чему он учит. Как будто вы деньги за эту статью заплатили)
 
Благодаря этому отвратительному материалу большое количество человек научились делать то, чему он учит. Как будто вы деньги за эту статью заплатили)
Даже не знаю чему ты там из первого ролика мог научиться тому, чего не мог бы сам наклацать без предварительной подготовки
 
Даже не знаю чему ты там из первого ролика мог научиться тому, чего не мог бы сам наклацать без предварительной подготовки
Как вы смеете так обращаться с легендой зеннолаба. Может у вас не хватает знаний чтобы осилить данную статью которую вообщето показали бесплатно и на которую ушло уйма времени, сил и пота чтобы добиться подобных знаний? За такое инфоциганы могут с лёгкостью 500евро просить за час обучения...

Ёжик открыл глаза на многие вещи которые раньше даже и не подразумевались и если вы с этим не согласны, то сделайте лучше - я же знаю что у вас это не выйдет. Удачи победить акамай как сделал это ёжик.

П.д Если что чатгпт в помощь.
 
Последнее редактирование:
  • Спасибо
Реакции: n0n3mi1y
Как вы смеете так обращаться с легендой зеннолаба. Может у вас не хватает знаний чтобы осилить данную статью которую вообщето показали бесплатно и на которую ушло уйма времени, сил и пота чтобы добиться подобных знаний? За такое инфоциганы могут с лёгкостью 500евро просить за час обучения...

Ёжик открыл глаза на многие вещи которые раньше даже и не подразумевались и если вы с этим не согласны, то сделайте лучше - я же знаю что у вас это не выйдет. Удачи победить акамай как сделал это ёжик.

П.д Если что чатгпт в помощь.
Как же мне повезло, что мне не нужно соревноваться с ёжиком в победе над акамай! Могу ли я заказать у вас уроки по мудрости ёжика?
 
обучающим ролик (первый) точно назвать нельзя, просто рабочий процесс и мысли вслух.
Дак у него же в названии роликов есть хэштег #livecoding, что подразумевает специфику видео
Ну и понятно, что подобное не для "совсем" новичком
 
Дак у него же в названии роликов есть хэштег #livecoding, что подразумевает специфику видео
Ну и понятно, что подобное не для "совсем" новичком
Человек хочет за бесплатно чтобы ему разжевали обфускацию ХС кода как это делается на курсах за 150 долларов, на затерянном от мейнстрима форуме по боттингу лол

Может ещё ёжик должен был "javascript с 0 для чайников" добавить в видос как 10и часовое вступление?
 
  • Спасибо
Реакции: southside
rastvl

Подскажи сложно ли сделать эмуляцию Claudflare на своем сайте или локально используя sitekey и url как это делают такие сервисы как 2captcha для ручного решения и получения cf response
 
Решил поглубже изучить JS!
Огромнеешее тебе человеческоен Спасибо за статью.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)