refactor utility/helper functions
This commit is contained in:
parent
32d5fdcbad
commit
f99b0be52a
|
@ -10,11 +10,11 @@ find_package(Iconv REQUIRED)
|
||||||
find_library(SYLVERANT_LIBRARY sylverant REQUIRED)
|
find_library(SYLVERANT_LIBRARY sylverant REQUIRED)
|
||||||
|
|
||||||
# decrypt_packets
|
# decrypt_packets
|
||||||
add_executable(decrypt_packets decrypt_packets.c)
|
add_executable(decrypt_packets decrypt_packets.c utils.c)
|
||||||
target_link_libraries(decrypt_packets ${SYLVERANT_LIBRARY})
|
target_link_libraries(decrypt_packets ${SYLVERANT_LIBRARY})
|
||||||
|
|
||||||
# gen_qst_header
|
# gen_qst_header
|
||||||
add_executable(gen_qst_header gen_qst_header.c)
|
add_executable(gen_qst_header gen_qst_header.c utils.c)
|
||||||
target_link_libraries(gen_qst_header ${SYLVERANT_LIBRARY} ${ICONV_LIBRARIES})
|
target_link_libraries(gen_qst_header ${SYLVERANT_LIBRARY} ${ICONV_LIBRARIES})
|
||||||
target_compile_definitions(gen_qst_header PRIVATE ICONV_CONST=${ICONV_CONST})
|
target_compile_definitions(gen_qst_header PRIVATE ICONV_CONST=${ICONV_CONST})
|
||||||
target_include_directories(gen_qst_header PRIVATE ${ICONV_INCLUDE_DIR})
|
target_include_directories(gen_qst_header PRIVATE ${ICONV_INCLUDE_DIR})
|
||||||
|
|
|
@ -1,43 +1,14 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
|
||||||
#include <sylverant/encryption.h>
|
#include <sylverant/encryption.h>
|
||||||
|
|
||||||
void* read_file(const char *filename, uint32_t *out_file_size) {
|
#include "utils.h"
|
||||||
if (!out_file_size)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
FILE *fp = fopen(filename, "rb");
|
|
||||||
if (!fp)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
fseek(fp, 0, SEEK_END);
|
|
||||||
*out_file_size = ftell(fp);
|
|
||||||
fseek(fp, 0, SEEK_SET);
|
|
||||||
|
|
||||||
uint8_t *result = malloc(*out_file_size);
|
|
||||||
|
|
||||||
uint32_t read, next;
|
|
||||||
uint8_t buffer[1024];
|
|
||||||
|
|
||||||
next = 0;
|
|
||||||
|
|
||||||
do {
|
|
||||||
read = fread(buffer, 1, 1024, fp);
|
|
||||||
if (read) {
|
|
||||||
memcpy(&result[next], buffer, read);
|
|
||||||
next += read;
|
|
||||||
}
|
|
||||||
} while (read);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
if (argc != 3) {
|
if (argc != 3) {
|
||||||
printf("Usage: pso_decrypt server-packet-data.bin client-packet-data.bin\n");
|
printf("Usage: decrypt_packets server-packet-data.bin client-packet-data.bin\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#include <iconv.h>
|
#include <iconv.h>
|
||||||
#include <sylverant/prs.h>
|
#include <sylverant/prs.h>
|
||||||
|
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
typedef struct __attribute__((packed)) {
|
typedef struct __attribute__((packed)) {
|
||||||
uint32_t object_code_offset;
|
uint32_t object_code_offset;
|
||||||
uint32_t function_offset_table_offset;
|
uint32_t function_offset_table_offset;
|
||||||
|
@ -50,34 +52,6 @@ int sjis_to_utf8(char *s, size_t length) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_filesize(const char *filename, size_t *out_size) {
|
|
||||||
FILE *fp = fopen(filename, "rb");
|
|
||||||
if (!fp)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
fseek(fp, 0, SEEK_END);
|
|
||||||
*out_size = ftell(fp);
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* path_to_filename(const char *path) {
|
|
||||||
const char *pos = strrchr(path, '/');
|
|
||||||
if (pos) {
|
|
||||||
return pos+1;
|
|
||||||
} else {
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
char* append_file_extension(const char *filename, const char *extension) {
|
|
||||||
char *new_filename = malloc(strlen(filename) + strlen(extension));
|
|
||||||
strcpy(new_filename, filename);
|
|
||||||
strcat(new_filename, extension);
|
|
||||||
return new_filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
void generate_qst_header(const char *src_file, size_t src_file_size, QUEST_BIN_HEADER *bin_header, QST_HEADER *out_header) {
|
void generate_qst_header(const char *src_file, size_t src_file_size, QUEST_BIN_HEADER *bin_header, QST_HEADER *out_header) {
|
||||||
memset(out_header, 0, sizeof(QST_HEADER));
|
memset(out_header, 0, sizeof(QST_HEADER));
|
||||||
|
|
||||||
|
@ -105,7 +79,7 @@ void generate_qst_header(const char *src_file, size_t src_file_size, QUEST_BIN_H
|
||||||
}
|
}
|
||||||
|
|
||||||
int write_qst_header(const char *src_file, QST_HEADER *header) {
|
int write_qst_header(const char *src_file, QST_HEADER *header) {
|
||||||
char *header_file = append_file_extension(src_file, ".hdr");
|
char *header_file = append_string(src_file, ".hdr");
|
||||||
|
|
||||||
FILE *fp = fopen(header_file, "wb");
|
FILE *fp = fopen(header_file, "wb");
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
|
|
65
utils.c
Normal file
65
utils.c
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
void* read_file(const char *filename, uint32_t *out_file_size) {
|
||||||
|
if (!out_file_size)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
FILE *fp = fopen(filename, "rb");
|
||||||
|
if (!fp)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
fseek(fp, 0, SEEK_END);
|
||||||
|
*out_file_size = ftell(fp);
|
||||||
|
fseek(fp, 0, SEEK_SET);
|
||||||
|
|
||||||
|
uint8_t *result = malloc(*out_file_size);
|
||||||
|
|
||||||
|
uint32_t read, next;
|
||||||
|
uint8_t buffer[1024];
|
||||||
|
|
||||||
|
next = 0;
|
||||||
|
|
||||||
|
do {
|
||||||
|
read = fread(buffer, 1, 1024, fp);
|
||||||
|
if (read) {
|
||||||
|
memcpy(&result[next], buffer, read);
|
||||||
|
next += read;
|
||||||
|
}
|
||||||
|
} while (read);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_filesize(const char *filename, size_t *out_size) {
|
||||||
|
FILE *fp = fopen(filename, "rb");
|
||||||
|
if (!fp)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
fseek(fp, 0, SEEK_END);
|
||||||
|
*out_size = ftell(fp);
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* path_to_filename(const char *path) {
|
||||||
|
const char *pos = strrchr(path, '/');
|
||||||
|
if (pos) {
|
||||||
|
return pos+1;
|
||||||
|
} else {
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char* append_string(const char *a, const char *b) {
|
||||||
|
if (!a)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
char *result = malloc(strlen(a) + strlen(b));
|
||||||
|
strcpy(result, a);
|
||||||
|
strcat(result, b);
|
||||||
|
return result;
|
||||||
|
}
|
11
utils.h
Normal file
11
utils.h
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef UTILS_H_INCLUDED
|
||||||
|
#define UTILS_H_INCLUDED
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void* read_file(const char *filename, uint32_t *out_file_size);
|
||||||
|
int get_filesize(const char *filename, size_t *out_size);
|
||||||
|
const char* path_to_filename(const char *path);
|
||||||
|
char* append_string(const char *a, const char *b);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue