Софт func injector (luaaa)

kizn

q(≧▽≦q)
Всефорумный модератор
2,411
2,137
как через func injector смотреть обращения, которые делаются через requests
 

asdzxcjqwe

¯\_(ツ)_/¯
Друг
622
716
фиксится простой проверкой кода лол
фиксится твой "фикс" простым перехватом твоих проверок и подменой возвращаемого результата

как через func injector смотреть обращения, которые делаются через requests
совершают запросы разными способами, необязательно все проходит через requests
легче перехватить все имеющиеся функции и ffi
Lua:
local http = require("requests")
local hook = {
    request = http.request
}

http.request = function(method, url, args, ...)
    print("http request", method, url, args, ...)
    return hook.request(method, url, args, ...) -- закомментировать, чтобы не отправлять запрос
end


upd: это расширенный способ для перехвата requests и downloadFile + ответа от сервера
еще хорошо добавить хуки на copas и ffi функции
(не проверено, поэтому ошибки/краши исправить самостоятельно)
Lua (отладка / сбор информации):
local http = require("requests")

local hook = {
    MAX_RESPONSE_OUTLEN = 255,
    downloadUrlToFile = downloadUrlToFile,
    request = http.request
}

function downloadUrlToFile(url, filename, callback)
    local file
    print("downloadUrlToFile", url, filename, callback or "no callback")

    return hook.downloadUrlToFile(url, filename, function(id, state)
        print("downloadUrlToFile", "(callback)", url, filename, id, state)

        if state == 6 then
            repeat
                -- устраняем баг, когда иногда не открывает файл с первого раза
                file = io.open(filename, "rb")
            until file

            local response = file:read("*a")
            file:close()

            print("downloadUrlToFile", "(response)", url, filename)
            print("downloadUrlToFile", "(response data)", response:len() > hook.MAX_RESPONSE_OUTLEN and "(trunc)" or "", response:sub(1, hook.MAX_RESPONSE_OUTLEN))
        end

        callback(id, state)
    end)
end

function http.request(method, url, args)
    print("request", method, url, args or "no args")
    local response = hook.request(method, url, args)
    print("request", "(response)", method, url, args or "no args")
    print("request", "(response text)", response.text:len() > hook.MAX_RESPONSE_OUTLEN and "(trunc)" or "", response.text:sub(1, hook.MAX_RESPONSE_OUTLEN))
    return response
end

Lua (подмена ответа):
local http = require("requests")

local hook = {
    downloadUrlToFile = downloadUrlToFile,
    request = http.request
}

function downloadUrlToFile(url, filename, callback)
    if url:find("auth.php") then
        -- помещаем фейк ответ в файл
        local file = io.open(filename, "wb")
        file:write("your response")
        file:close()

        -- вызываем callback функу со статусом 6, говоря ей, что файл скачался
        return callback(0, 6)

    elseif url:find("sendstats.php") then
        -- не отправляем статистику на сервер
        return false
    end

    -- другие запросы пропускаем, например скачивание картинок
    return hook.downloadUrlToFile(url, filename, callback)
end

function http.request(method, url, args)
    if url:find("login.php") then
        return {
            text = "your response"
        }
    end

    -- не пропускаем другие запросы, поэтому не вызываем оригинальную функу .request
    -- но чтобы не крашило, возвращаем хоть что-то
    return {
        text = ""
    }
end
 
Последнее редактирование:

kizn

q(≧▽≦q)
Всефорумный модератор
2,411
2,137
фиксится твой "фикс" простым перехватом твоих проверок и подменой возвращаемого результата


совершают запросы разными способами, необязательно все проходит через requests
легче перехватить все имеющиеся функции и ffi
Lua:
local http = require("requests")
local hook = {
    request = http.request
}

http.request = function(method, url, args, ...)
    print("http request", method, url, args, ...)
    return hook.request(method, url, args, ...) -- закомментировать, чтобы не отправлять запрос
end


upd: это расширенный способ для перехвата requests и downloadFile + ответа от сервера
еще хорошо добавить хуки на copas и ffi функции
(не проверено, поэтому ошибки/краши исправить самостоятельно)
Lua (отладка / сбор информации):
local http = require("requests")

local hook = {
    MAX_RESPONSE_OUTLEN = 255,
    downloadUrlToFile = downloadUrlToFile,
    request = http.request
}

function downloadUrlToFile(url, filename, callback)
    local file
    print("downloadUrlToFile", url, filename, callback or "no callback")

    return hook.downloadUrlToFile(url, filename, function(id, state)
        print("downloadUrlToFile", "(callback)", url, filename, id, state)

        if state == 6 then
            repeat
                -- устраняем баг, когда иногда не открывает файл с первого раза
                file = io.open(filename, "rb")
            until file

            local response = file:read("*a")
            file:close()

            print("downloadUrlToFile", "(response)", url, filename)
            print("downloadUrlToFile", "(response data)", response:len() > hook.MAX_RESPONSE_OUTLEN and "(trunc)" or "", response:sub(1, hook.MAX_RESPONSE_OUTLEN))
        end

        callback(id, state)
    end)
end

function http.request(method, url, args)
    print("request", method, url, args or "no args")
    local response = hook.request(method, url, args)
    print("request", "(response)", method, url, args or "no args")
    print("request", "(response text)", response.text:len() > hook.MAX_RESPONSE_OUTLEN and "(trunc)" or "", response.text:sub(1, hook.MAX_RESPONSE_OUTLEN))
    return response
end

Lua (подмена ответа):
local http = require("requests")

local hook = {
    downloadUrlToFile = downloadUrlToFile,
    request = http.request
}

function downloadUrlToFile(url, filename, callback)
    if url:find("auth.php") then
        -- помещаем фейк ответ в файл
        local file = io.open(filename, "wb")
        file:write("your response")
        file:close()

        -- вызываем callback функу со статусом 6, говоря ей, что файл скачался
        return callback(0, 6)

    elseif url:find("sendstats.php") then
        -- не отправляем статистику на сервер
        return false
    end

    -- другие запросы пропускаем, например скачивание картинок
    return hook.downloadUrlToFile(url, filename, callback)
end

function http.request(method, url, args)
    if url:find("login.php") then
        return {
            text = "your response"
        }
    end

    -- не пропускаем другие запросы, поэтому не вызываем оригинальную функу .request
    -- но чтобы не крашило, возвращаем хоть что-то
    return {
        text = ""
    }
end
а как можно подменить ссылку request запроса?
 

asdzxcjqwe

¯\_(ツ)_/¯
Друг
622
716
а как можно подменить ссылку request запроса?
просто же изменить переменную url перед отправкой запроса
Lua (подмена url):
local http = require("requests")
local hook = {
    request = http.request
}

function http.request(method, url, args, ...)
    print("http request", "(original url)", method, url)
    url = url:gsub("serial=(%d+)", "serial=123") -- подменим серийник, если не шифруется в ссылке (для GET)
    args.data.serial = 123 -- для POST (наверное.. точно не уверен)
    url = url:gsub("http://", "https://") -- пустим запросы через https (или наоборот)
    url = url:gsub("license%-server.com", "my-crack-server.net") -- перенаправим запросы на другой сайт
    print("http request", "(new url)", method, url)
    return hook.request(method, url, args, ...)
end
 

Similar threads

  1. Ответы
    53
    Просмотры
    43K
  2. Ответы
    12
    Просмотры
    3K
  3. Ответы
    13
    Просмотры
    3K