Created
February 27, 2025 05:02
-
-
Save OneCDOnly/3fcc1fb6e5a5420f28e20877cd82480c to your computer and use it in GitHub Desktop.
decompiled libuLinux_Util.so.0.0
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* This file was generated by the Hex-Rays decompiler version 8.4.0.240320. | |
Copyright (c) 2007-2021 Hex-Rays <[email protected]> | |
Detected compiler: GNU C++ | |
*/ | |
#include <defs.h> | |
#include <stdarg.h> | |
//------------------------------------------------------------------------- | |
// Function declarations | |
void (__fastcall *init_proc())(); | |
void sub_9B40(); | |
__int64 __fastcall _str_to_hex(const char *, __int64, int); | |
__int64 __fastcall Get_QPKG_Encrypt_String(_QWORD, _QWORD); // weak | |
// __int64 __fastcall SE_Set_Buzzer(_QWORD, _QWORD); weak | |
// __int64 Is_x59_ProII(void); weak | |
// int chmod(const char *file, __mode_t mode); | |
// __int64 __fastcall Enable_Autorun(_QWORD); weak | |
// int chdir(const char *path); | |
char *__fastcall get_string_until_ch(__int64, char, char *, int); | |
// int dup2(int fd, int fd2); | |
// int printf(const char *format, ...); | |
// __int64 __fastcall EVP_DigestInit(_QWORD, _QWORD); weak | |
char *__fastcall combine_string(const char *, const char *); | |
size_t __fastcall GetPrivateProfileStringNoLock(const char *, const char *, const char *, char *, int, const char *); | |
__int64 __fastcall Is_Mb_Word_By_Codepage(_BYTE *, int); | |
__int64 __fastcall iface_get_hwaddr(const char *, char *, int); | |
// void *memset(void *s, int c, size_t n); | |
// __int64 ftell(FILE *stream); | |
// __int64 __fastcall Blk_Dev_Write_Flash(_QWORD, _QWORD); weak | |
__int64 __fastcall Get_Sys_HWtype(_DWORD *); | |
// struct group *getgrnam(const char *name); | |
// int snprintf(char *s, size_t maxlen, const char *format, ...); | |
// __pid_t setsid(void); | |
// __int64 Is_x59_Plus(void); weak | |
// __int64 __fastcall Blk_Dev_Read_Flash(_QWORD, _QWORD, _QWORD); weak | |
__int64 __fastcall Get_All_QPKG_Info(void **); | |
__int64 __fastcall NAS_File_Lock(_QWORD, _QWORD); // weak | |
// int inet_pton(int af, const char *cp, void *buf); | |
// __int64 __fastcall Ini_Conf_Write_Lock_File_Timeout(_QWORD, _QWORD); weak | |
// int close(int fd); | |
__int64 __fastcall NAS_File_Unlock(_QWORD); // weak | |
// int utime(const char *file, const struct utimbuf *file_times); | |
// int ioctl(int fd, unsigned __int64 request, ...); | |
size_t __fastcall GetPrivateProfileString(__int64, __int64, const char *, char *, signed int, __int64); | |
// int shmdt(const void *shmaddr); | |
int *__fastcall qnap_auto_close_fd(int *); | |
_BOOL8 __fastcall Conf_Dir_Get_Bool(__int64, const char *, const char *, int, _BOOL4 *); | |
__int64 __fastcall mb_strcmp_ex(_QWORD, _QWORD, _QWORD); // weak | |
// __int64 __gmon_start__(void); weak | |
// int puts(const char *s); | |
// int fseek(FILE *stream, __int64 off, int whence); | |
// int toupper(int c); | |
// int execvp(const char *file, char *const argv[]); | |
// void __noreturn exit(int status); | |
// __int64 EVP_sha256(void); weak | |
int init_debugger(); | |
// void __noreturn __assert_fail(const char *assertion, const char *file, unsigned int line, const char *function); | |
// __int64 EVP_CIPHER_CTX_new(void); weak | |
__int64 __fastcall Base64_Decode(_QWORD, _QWORD); // weak | |
_BYTE *__fastcall local_skip_white_space(_BYTE *); | |
// int strcasecmp(const char *s1, const char *s2); | |
// int gettimeofday(struct timeval *tv, __timezone_ptr_t tz); | |
void err_lock(); | |
void __fastcall Conf_Dir_Free(__int64); | |
char *__fastcall Password_Encode(const char *, int, int); | |
_BOOL8 __fastcall is_commented_string(__int64); | |
// __int64 __fastcall Ini_Conf_Remove_Section_Compatible(_QWORD, _QWORD); weak | |
FILE *qnap_popen(char *, const char *, ...); | |
const char *__fastcall Conf_Dir_Get_Str(__int64, const char *, const char *, const char *, char *, int); | |
// ssize_t read(int fd, void *buf, size_t nbytes); | |
_BOOL8 __fastcall Set_Private_Profile_String(__int64, __int64, __int64, __int64); | |
// int strncmp(const char *s1, const char *s2, size_t n); | |
// void *malloc(size_t size); | |
// int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); | |
// int system(const char *command); | |
__int64 __fastcall Get_All_QFIX_Info(void **); | |
// int unlink(const char *name); | |
__int64 __fastcall QNAP_Digest_MD5(_QWORD, _QWORD, _QWORD, _QWORD); // weak | |
// void __noreturn _exit(int status); | |
// int semget(key_t key, int nsems, int semflg); | |
__int64 __fastcall Conf_Dir_Set_Int(__int64, const char *, const char *, unsigned int); | |
// void *dlsym(void *handle, const char *name); | |
__int64 __fastcall Set_Device_SUID(_QWORD); // weak | |
__int64 __fastcall getQPKGDisplayNameIndex(const char *); | |
__int64 __fastcall Get_QPKG_Auth_Encrypt_String(_QWORD, _QWORD); // weak | |
// void srandom(unsigned int seed); | |
// __pid_t getpid(void); | |
// int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); | |
// __int64 __fastcall naslog_event_add(_QWORD); weak | |
__int64 __fastcall is_pid_alive(unsigned int); | |
__int64 __fastcall Set_Device_CUID(_QWORD); // weak | |
// char *fgets(char *s, int n, FILE *stream); | |
// __int64 __fastcall EVP_CIPHER_CTX_free(_QWORD); weak | |
__int64 __fastcall _conf_set_field_err(_QWORD, _QWORD, _QWORD, _QWORD); // weak | |
size_t __fastcall GetProfileString(__int64, __int64, const char *, char *, signed int); | |
// struct passwd *getpwuid(__uid_t uid); | |
// int ioperm(unsigned __int64 from, unsigned __int64 num, int turn_on); | |
// double atof(const char *nptr); | |
int __fastcall uart_update_firmware_to_mcu(int, __int64, unsigned int); | |
_BOOL8 __fastcall Set_Profile_Boolean(__int64, __int64, int); | |
FILE **finish_debugger(); | |
// key_t ftok(const char *pathname, int proj_id); | |
_BOOL8 __fastcall Is_Sound_Card_Playback_Running(unsigned int); | |
__int64 __fastcall find_char_in_string(__int64, char); | |
// int fputc(int c, FILE *stream); | |
_BOOL8 __fastcall WritePrivateProfileString(__int64, __int64, __int64, __int64); | |
__int64 __fastcall Get_QNAPFlag_File_Info(const char *, char *); | |
// void free(void *ptr); | |
// size_t strlen(const char *s); | |
__int64 __fastcall QNAP_Version_Compare(_QWORD, _QWORD); // weak | |
__int64 __fastcall qnap_pclose(_QWORD); // weak | |
// int ferror(FILE *stream); | |
// DIR *opendir(const char *name); | |
// int pclose(FILE *stream); | |
_BOOL8 __fastcall is_korea_word(_BYTE *); | |
__int64 __fastcall Is_Mb_Word(_BYTE *); | |
// int mkstemp64(char *template); | |
// const unsigned __int16 **__ctype_b_loc(void); | |
// int __fastcall __cxa_finalize(void *); | |
__int64 __fastcall is_black_str(__int64); | |
// int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); | |
// char *realpath(const char *name, char *resolved); | |
__int64 __fastcall Close_File(__int64, __int64, FILE *); | |
// __int64 __fastcall EVP_DecryptFinal_ex(_QWORD, _QWORD, _QWORD); weak | |
// int msgctl(int msqid, int cmd, struct msqid_ds *buf); | |
__int64 __fastcall Base64_Encode(_QWORD, _QWORD, _QWORD); // weak | |
// __int64 __fastcall __tls_get_addr(_QWORD); weak | |
// int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); | |
// int sprintf(char *s, const char *format, ...); | |
_BOOL8 __fastcall is_jis_word(_BYTE *); | |
__int64 __fastcall stripe_white_space_tail(_QWORD); // weak | |
// int readdir64_r(DIR *dirp, struct dirent64 *entry, struct dirent64 **result); | |
// FILE *fdopen(int fd, const char *modes); | |
char *__fastcall Password_Decode(const char *, int); | |
// char *strrchr(const char *s, int c); | |
__int64 __fastcall Conf_Dir_Add_Sec(__int64, const char *); | |
// __int64 syscall(__int64 sysno, ...); | |
// int statfs64(const char *file, struct statfs64 *buf); | |
// __int64 atol(const char *nptr); | |
__int64 __fastcall get_section_name(__int64, char *, int); | |
size_t __fastcall Get_Profile_String(__int64, __int64, const char *, char *, signed int); | |
// int sscanf(const char *s, const char *format, ...); | |
// char *strtok_r(char *s, const char *delim, char **save_ptr); | |
// int pipe(int pipedes[2]); | |
// unsigned int sleep(unsigned int seconds); | |
__int64 __fastcall Open_File(const char *, int, FILE **); | |
__int64 __fastcall Get_Str_By_Offset(const char *, __off64_t, int, char *); | |
__int64 get_hw_type(void); // weak | |
// __int64 __fastcall Ini_Conf_Unlock_File(_QWORD); weak | |
// __int64 __fastcall GPIO_Enable_USB_LED_BLINK(_QWORD, _QWORD); weak | |
// int usleep(__useconds_t useconds); | |
// int open64(const char *file, int oflag, ...); | |
__int64 __fastcall SHM_Set_Field(_QWORD, _QWORD, _QWORD); // weak | |
// char *strstr(const char *haystack, const char *needle); | |
// int socketpair(int domain, int type, int protocol, int fds[2]); | |
// __int64 EVP_aes_256_cbc(void); weak | |
__int64 __fastcall Pic_Send_Read_EEPROM(char, unsigned __int8, __int64); | |
// void rewind(FILE *stream); | |
// char *strcat(char *dest, const char *src); | |
// int scandir64(const char *dir, struct dirent64 ***namelist, int (*selector)(const struct dirent64 *), int (*cmp)(const struct dirent64 **, const struct dirent64 **)); | |
__int64 __fastcall Pic_Send_Raw_Cmd(unsigned int); | |
__int64 __fastcall SendNoticeToLogEngine_V2(int, unsigned int, unsigned int, const char *, int, const char *, int, int, int, const char *, const char *, const char *, const char *, int, const char *, const char *, const char *, const char *, const char *); | |
// __int64 __fastcall Get_CPU_Model(_QWORD, _QWORD, _QWORD); weak | |
__int64 __fastcall Conf_Set_Field(__int64, __int64, __int64, __int64); | |
__int64 __fastcall shm_do_storage(const char *, char *, int, char *, int); | |
__int64 __fastcall Set_Buzzer_Status(_QWORD); // weak | |
// int fputs(const char *s, FILE *stream); | |
// __int64 strtol(const char *nptr, char **endptr, int base); | |
__int64 __fastcall Get_One_QPKG_Info_Dir(_QWORD, _QWORD, _QWORD); // weak | |
// int glob64(const char *pattern, int flags, int (*errfunc)(const char *, int), glob64_t *pglob); | |
// ssize_t readlink(const char *path, char *buf, size_t len); | |
__int64 check_nas_config(void); // weak | |
// int atoi(const char *nptr); | |
__int64 __fastcall Is_File_Exist(_QWORD); // weak | |
__int64 __fastcall qnap_sort_compare(_QWORD, _QWORD, _QWORD, _QWORD); // weak | |
// __int64 __fastcall EVP_DecryptInit_ex(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); weak | |
_BOOL8 __fastcall WriteProfileString(__int64, __int64, __int64); | |
__int64 __fastcall Conf_Dir_Wirte_File(_QWORD); // weak | |
// int regcomp(regex_t *preg, const char *pattern, int cflags); | |
__int64 __fastcall Get_Flash_Config(__int64, unsigned int, __int64); | |
// __int64 __fastcall EVP_CIPHER_CTX_set_padding(_QWORD, _QWORD); weak | |
_BOOL8 __fastcall is_sc_word(_BYTE *); | |
__int64 __fastcall uart_start_row(int, char); | |
_BOOL8 __fastcall string_ended_with_EOL(const char *); | |
__int64 __fastcall Get_Device_SUID(_QWORD, _QWORD); // weak | |
char *__fastcall skip_to_EOL(FILE *); | |
_BOOL8 _is_ram_almost_full(); | |
const char *__fastcall get_filename(const char *); | |
// void *memmove(void *dest, const void *src, size_t n); | |
__int64 __fastcall Conf_Dir_Set_Str(__int64, const char *, const char *, const char *); | |
// char *strchr(const char *s, int c); | |
// int __lxstat64(int ver, const char *filename, struct stat64 *stat_buf); | |
// __pid_t waitpid(__pid_t pid, int *stat_loc, int options); | |
__int64 __fastcall skip_white_space(_QWORD); // weak | |
__int64 __fastcall shm_do_misc(const char *, char *, int, char *, int); | |
__int64 __fastcall iface_set_hwaddr(const char *, __int64, __int64); | |
// int vsnprintf(char *s, size_t maxlen, const char *format, __gnuc_va_list arg); | |
// size_t fread(void *ptr, size_t size, size_t n, FILE *stream); | |
// __int64 __fastcall EVP_MD_CTX_free(_QWORD, _QWORD, _QWORD); weak | |
// char *getenv(const char *name); | |
__int64 __fastcall Get_Mac_Address(char *, int); | |
__int64 __fastcall _conf_remove_section_err(const char *, const char *); | |
__int64 __fastcall mb_strcmp(_QWORD, _QWORD); // weak | |
// int *__errno_location(void); | |
_BOOL8 __fastcall Set_Profile_String(__int64, __int64, __int64); | |
// __int64 Get_System_Codepage(void); weak | |
// char *strdup(const char *s); | |
_BOOL8 __fastcall Is_QPKG_Installed(__int64); | |
__int64 __fastcall Get_String_Field(__int64, int, char, char *, int); | |
char *__fastcall Conf_Dir_Load(const char *); | |
// int strncasecmp(const char *s1, const char *s2, size_t n); | |
__int64 __fastcall AES_QTS_Encrypt(__int64, int, void *, const char *, int); | |
__int64 __fastcall qnap_sort_open(_QWORD); // weak | |
__int64 __fastcall Conf_Get_Field(__int64, __int64, __int64, __int64, unsigned int); | |
// int asprintf(char **ptr, const char *fmt, ...); | |
// struct passwd *fgetpwent(FILE *stream); | |
__int64 __fastcall Set_Flash_Config(__int64, __int64); | |
// int strcmp(const char *s1, const char *s2); | |
// int tolower(int c); | |
// __int64 __fastcall Ini_Conf_Set_Field_Compatible(_QWORD, _QWORD, _QWORD, _QWORD); weak | |
// __ssize_t getline(char **lineptr, size_t *n, FILE *stream); | |
__int64 __fastcall strip_EOL(const char *); | |
// __int64 __fastcall EVP_DigestFinal(_QWORD, _QWORD, _QWORD); weak | |
// char *strcpy(char *dest, const char *src); | |
__int64 qnap_sort_get_locale_of_display_language(void); // weak | |
// char *strtok(char *s, const char *delim); | |
__int64 __fastcall Conf_Dir_Get_Int(__int64, const char *, const char *, unsigned int, unsigned int *); | |
// __int64 __fastcall Ini_Conf_Get_Field_Compatible(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); weak | |
// __int64 __fastcall EVP_DecryptUpdate(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); weak | |
// __uid_t getuid(void); | |
size_t __fastcall Get_Private_Profile_String(__int64, __int64, const char *, char *, signed int, __int64); | |
__int64 __fastcall Get_Serial_Number(char *, int); | |
// __int64 __fastcall EVP_EncryptFinal_ex(_QWORD, _QWORD, _QWORD); weak | |
// void regfree(regex_t *preg); | |
// int memcmp(const void *s1, const void *s2, size_t n); | |
// void *calloc(size_t nmemb, size_t size); | |
__int64 __fastcall Conf_Dir_Add(__int64, const char *, const char *, const char *); | |
// int shmget(key_t key, size_t size, int shmflg); | |
// int feof(FILE *stream); | |
// int fclose(FILE *stream); | |
__int64 __fastcall shm_do_system(const char *, char *, int, char *, int); | |
__int64 __fastcall Pic_Send_Write_EEPROM(char, unsigned __int8, __int64); | |
// __int64 __fastcall EVP_EncryptInit_ex(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); weak | |
// __int64 random(void); | |
// char *strncpy(char *dest, const char *src, size_t n); | |
// int semop(int semid, struct sembuf *sops, size_t nsops); | |
// int __xstat64(int ver, const char *filename, struct stat64 *stat_buf); | |
// int pthread_rwlock_unlock(pthread_rwlock_t *rwlock); | |
// __off64_t lseek64(int fd, __off64_t offset, int whence); | |
// __int64 __fastcall Ini_Conf_Remove_Field_Compatible(_QWORD, _QWORD, _QWORD); weak | |
_BOOL8 __fastcall Is_QNAPFlag_Exist(const char *, const char *); | |
_BOOL8 __fastcall is_tc_word(_BYTE *); | |
__int64 __fastcall Conf_Dir_Remove(__int64, const char *, const char *); | |
// int msgget(key_t key, int msgflg); | |
__int64 __fastcall uart_prog_8byte(int, char, char *); | |
// int closedir(DIR *dirp); | |
// __int64 __fastcall EVP_EncryptUpdate(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); weak | |
// __pid_t fork(void); | |
// __int64 EVP_MD_CTX_new(void); weak | |
char *__fastcall Get_Random_Digit_String(int); | |
// FILE *fopen64(const char *filename, const char *modes); | |
// __int64 strtoll(const char *nptr, char **endptr, int base); | |
// size_t fwrite(const void *ptr, size_t size, size_t n, FILE *s); | |
// int pthread_mutex_lock(pthread_mutex_t *mutex); | |
// void *realloc(void *ptr, size_t size); | |
// __int64 EVP_md5(void); weak | |
_BOOL8 __fastcall Set_Profile_Integer(__int64, __int64, unsigned int); | |
_BOOL8 __fastcall is_pic_raw_running(unsigned int *); | |
// void perror(const char *s); | |
// int rand(void); | |
// int shmctl(int shmid, int cmd, struct shmid_ds *buf); | |
// __int64 QFAN_Is_Enable(void); weak | |
__int64 __fastcall local_conf_get_field(const char *, const char *, const char *, char *, int); | |
__int64 __fastcall Is_SUID_ENC_SALT_V2(const char *); | |
// int fprintf(FILE *stream, const char *format, ...); | |
// struct tm *localtime(const time_t *timer); | |
// ssize_t write(int fd, const void *buf, size_t n); | |
int __fastcall compare_string_by_flag(const char *, const char *); | |
// size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *tp); | |
FILE *__fastcall qnap_auto_close_file(FILE **); | |
// void *dlopen(const char *file, int mode); | |
// FILE *popen(const char *command, const char *modes); | |
__int64 __fastcall get_one_line_of_string(_QWORD); // weak | |
// int sysinfo(struct sysinfo *info); | |
const char *__fastcall Skip_White_Space_Ex(const char *); | |
// int pthread_mutex_unlock(pthread_mutex_t *mutex); | |
// __int64 EVP_sha1(void); weak | |
// __mode_t umask(__mode_t mask); | |
// void *memcpy(void *dest, const void *src, size_t n); | |
// struct passwd *getpwnam(const char *name); | |
// int rename(const char *old, const char *new); | |
// __int64 __fastcall EVP_DigestUpdate(_QWORD, _QWORD, _QWORD); weak | |
__int64 __fastcall Conf_Get_Field_NoLock(const char *, const char *, const char *, char *, int); | |
__int64 __fastcall XOR_Encrypt(__int64, int, int); | |
// __int64 __fastcall GPIO_Enable_USB_LED(_QWORD, _QWORD); weak | |
// struct dirent64 *readdir64(DIR *dirp); | |
// int mkdir(const char *path, __mode_t mode); | |
// time_t time(time_t *timer); | |
// int dlclose(void *handle); | |
// void *shmat(int shmid, const void *shmaddr, int shmflg); | |
// __pid_t vfork(void); | |
// int fflush(FILE *stream); | |
__int64 __fastcall qnap_sort_close(_QWORD); // weak | |
void timeout(int); | |
__int64 (**start())(void); | |
__int64 sub_ADE0(); | |
void sub_AE30(); | |
__int64 sub_AEB0(); | |
_BYTE *__fastcall local_skip_white_space(_BYTE *a1); | |
__int64 __fastcall local_conf_get_field(const char *a1, const char *a2, const char *a3, char *a4, int a5); | |
__int64 __fastcall get_tag_size(int a1); | |
__int64 __fastcall SHM_Debug_Section(const char *a1); | |
__int64 __fastcall shm_do_misc(const char *a1, char *a2, int a3, char *a4, int a5); | |
__int64 __fastcall shm_do_storage(const char *a1, char *a2, int a3, char *a4, int a5); | |
__int64 __fastcall shm_do_system(const char *a1, char *a2, int a3, char *a4, int a5); | |
__int64 __fastcall sub_DD1C(const char *a1, char *a2, int a3, char *a4, int a5); | |
__int64 __fastcall sub_E8BF(const char *a1, char *a2, int a3, char *a4, int a5); | |
__int64 __fastcall sub_EA70(const char *a1, char *a2, int a3, char *a4, int a5); | |
__int64 __fastcall SHM_Set_Field(const char *a1, const char *a2, char *a3); | |
__int64 __fastcall SHM_Get_Field(const char *a1, const char *a2, char *a3, int a4); | |
__int64 SHM_Destory(); // weak | |
__int64 SHM_Init(); // weak | |
__time_t sub_1002E(); | |
int __fastcall sub_10055(const char *a1, const char *a2, int a3); | |
__int64 __fastcall sub_10098(key_t a1); | |
__int64 __fastcall sub_10135(int a1); | |
__int64 __fastcall sub_10189(int a1); | |
__int64 __fastcall sub_101CF(int a1); | |
int __fastcall sub_10223(const char *a1); | |
__int64 __fastcall sub_1026B(const char *a1, __int64 a2); | |
key_t __fastcall sub_102F1(const char *a1); | |
key_t __fastcall sub_103EB(const char *a1); | |
char *sub_104E8(); | |
_DWORD *__fastcall sub_10580(const char *a1); | |
__int64 __fastcall sub_10707(const char *a1); | |
__int64 __fastcall sub_1074C(const char *a1, int a2); | |
char *__fastcall sub_10796(const char *a1); | |
__int64 __fastcall sub_107F1(const char *a1, const char *a2); | |
__int64 __fastcall sub_1084E(const char *a1); | |
__int64 __fastcall sub_10893(const char *a1, int a2); | |
char *__fastcall sub_108DD(const char *a1); | |
__int64 __fastcall sub_10938(const char *a1, const char *a2); | |
__int64 __fastcall sub_10995(const char *a1); | |
__int64 __fastcall sub_10A0D(const char *a1); | |
__int64 __fastcall sub_10A73(const char *a1); | |
__int64 __fastcall sub_10A93(const char *a1); | |
__int64 __fastcall sub_10AC0(key_t a1); | |
__int64 __fastcall sub_10AFB(const char *a1, int a2); | |
__time_t __fastcall sub_10BAE(char *a1); | |
__int64 __fastcall sub_10BEB(const char *a1); | |
__int64 __fastcall sub_10C34(const char *a1, __int64 a2); | |
__int64 __fastcall sub_10C82(const char *a1, int a2); | |
void *__fastcall sub_10D2F(const char *a1, int a2); | |
int __fastcall sub_10D93(const char *a1, int a2); | |
__int64 __fastcall sub_10DD8(const char *a1); | |
_BYTE *__fastcall sub_10E22(_BYTE *a1); | |
const char *__fastcall sub_10E4D(const char *a1); | |
__int64 __fastcall sub_10EB4(_BYTE *a1, char *a2); | |
__int64 __fastcall sub_10F8E(char *a1, char *a2, char *a3); | |
__int64 __fastcall sub_110E6(const char *a1); | |
__int64 __fastcall sub_11133(const char *a1); | |
__int64 __fastcall sub_11205(__int64 a1, __int64 a2); | |
__int64 __fastcall sub_1122F(__int64 a1); | |
__int64 __fastcall sub_11258(__int64 a1, int a2); | |
char *__fastcall sub_1127F(int *a1); | |
_DWORD *__fastcall sub_11299(_DWORD *a1, int a2); | |
__int64 __fastcall sub_112BD(__int64 a1); | |
__int64 __fastcall sub_112D8(__int64 a1, int a2); | |
__int64 __fastcall sub_112FD(__int64 a1, int a2); | |
__int64 __fastcall sub_11322(const char *a1, const char *a2, int a3, char a4); | |
char *__fastcall sub_1142F(int *a1, const char *a2); | |
__int64 __fastcall sub_114A7(const char *a1, const char *a2); | |
__int64 __fastcall sub_11616(const char *a1, __int64 a2, const char *a3, const char *a4); | |
__int64 __fastcall sub_117D4(const char *a1); | |
__int64 __fastcall sub_1187B(char *a1, const char *a2, char a3); | |
__int64 __fastcall Conf_Get_Sections_V2(char *a1, _QWORD *a2, char a3); | |
__int64 __fastcall Conf_Get_Fields_V2(char *a1, const char *a2, _QWORD *a3, char a4); | |
__int64 __fastcall Conf_Get_Value_V2(char *a1, const char *a2, const char *a3, char *a4, int a5, char a6); | |
__int64 __fastcall Conf_Add_Set_Count(const char *a1); | |
_BOOL8 is_ram_almost_full(); | |
const char *__fastcall Skip_White_Space_Ex(const char *a1); | |
const char *__fastcall Skip_White_Space_HT(const char *a1); | |
__int64 __fastcall find_char_in_string(__int64 a1, char a2); | |
char *__fastcall get_string_until_ch(__int64 a1, char a2, char *a3, int a4); | |
_BOOL8 __fastcall is_commented_string(__int64 a1); | |
__int64 __fastcall Sed_Trans_Str(const char *a1, __int64 a2); | |
__int64 __fastcall get_section_name(__int64 a1, char *a2, int a3); | |
__int64 __fastcall get_field_name(__int64 a1, char *a2, int a3); | |
__int64 __fastcall compare_string(__int64 a1, __int64 a2); | |
int __fastcall compare_case_string(const char *a1, const char *a2); | |
__int64 __fastcall compare_string_ex(__int64 a1, __int64 a2, unsigned int a3); | |
int __fastcall compare_string_by_flag(const char *a1, const char *a2); | |
__int64 __fastcall sub_12A08(const char *a1, char *a2, int a3); | |
__int64 __fastcall String_To_Upper_Case(__int64 a1); | |
__int64 __fastcall is_pid_alive(unsigned int a1); | |
__int64 __fastcall Conf_Lock_File(const char *a1, char a2, int a3); | |
__int64 __fastcall Conf_Unlock_File(const char *a1, char a2); | |
__int64 __fastcall Open_File(const char *a1, int a2, FILE **a3); | |
__int64 __fastcall Close_File(__int64 a1, __int64 a2, FILE *a3); | |
__int64 __fastcall Get_String_Field(__int64 a1, int a2, char a3, char *a4, int a5); | |
__int64 __fastcall Set_String_Field(__int64 a1, int a2, char a3, const char *a4, char *a5, int a6); | |
__int64 __fastcall Insert_String_Field(__int64 a1, int a2, char a3, const char *a4, char *a5, int a6); | |
__int64 __fastcall Remove_String_Field(__int64 a1, int a2, char a3); | |
__int64 __fastcall Parse_String_Field(__int64 a1, __int64 a2); | |
__int64 __fastcall SYS_Get_One_String(const char *a1, int a2, char a3, const char *a4, char *a5, int a6); | |
__int64 __fastcall SYS_Set_One_String(char *a1, int a2, char a3, const char *a4, const char *a5); | |
const char *__fastcall Conf_Dir_Get_Str(__int64 a1, const char *a2, const char *a3, const char *a4, char *a5, int a6); | |
__int64 __fastcall Conf_Dir_Get_Int(__int64 a1, const char *a2, const char *a3, unsigned int a4, unsigned int *a5); | |
_BOOL8 __fastcall Conf_Dir_Get_Bool(__int64 a1, const char *a2, const char *a3, int a4, _BOOL4 *a5); | |
__int64 __fastcall Conf_Dir_Remove(__int64 a1, const char *a2, const char *a3); | |
__int64 __fastcall Conf_Dir_Dump(__int64 a1); | |
__int64 __fastcall Conf_Dir_Add_Sec(__int64 a1, const char *a2); | |
__int64 __fastcall Conf_Dir_Add(__int64 a1, const char *a2, const char *a3, const char *a4); | |
__int64 __fastcall Conf_Dir_Wirte_File(__int64 a1); | |
__int64 __fastcall Conf_Dir_Set_Str(__int64 a1, const char *a2, const char *a3, const char *a4); | |
__int64 __fastcall Conf_Dir_Set_Int(__int64 a1, const char *a2, const char *a3, unsigned int a4); | |
__int64 __fastcall Conf_Dir_Set_Bool(__int64 a1, const char *a2, const char *a3, int a4); | |
__int64 __fastcall Conf_Dir_Set_Long(__int64 a1, const char *a2, const char *a3, __int64 a4); | |
__int64 __fastcall Conf_Dir_Set_Longlong(__int64 a1, const char *a2, const char *a3, __int64 a4); | |
void __fastcall Conf_Dir_Free(__int64 a1); | |
char *__fastcall Conf_Dir_Load(const char *a1); | |
__int64 __fastcall Conf_Case_Sensitive(unsigned int a1); | |
__int64 __fastcall Conf_Force_Write(unsigned int a1); | |
__int64 __fastcall Conf_Get_Field(__int64 a1, __int64 a2, __int64 a3, __int64 a4, unsigned int a5); | |
__int64 __fastcall Conf_Get_Field_NoLock(const char *a1, const char *a2, const char *a3, char *a4, int a5); | |
__int64 __fastcall Conf_Enum_Section(const char *a1, char *a2, int a3); | |
__int64 __fastcall conf_remove_section_err(const char *a1, const char *a2); | |
__int64 __fastcall Conf_Remove_Section(__int64 a1, __int64 a2); | |
__int64 __fastcall Conf_Rename_Section(char *a1, const char *a2, const char *a3); | |
__int64 __fastcall conf_remove_field_err(const char *a1, const char *a2, const char *a3); | |
__int64 __fastcall Conf_Remove_Field(__int64 a1, __int64 a2, __int64 a3); | |
__int64 __fastcall conf_set_field_err(const char *a1, const char *a2, const char *a3, const char *a4); | |
__int64 __fastcall Conf_Set_Field(__int64 a1, __int64 a2, __int64 a3, __int64 a4); | |
size_t __fastcall GetPrivateProfileString(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5, __int64 a6); | |
size_t __fastcall GetPrivateProfileStringNoLock(const char *a1, const char *a2, const char *a3, char *a4, int a5, const char *a6); | |
_BOOL8 __fastcall WritePrivateProfileString(__int64 a1, __int64 a2, __int64 a3, __int64 a4); | |
size_t __fastcall GetProfileString(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5); | |
_BOOL8 __fastcall WriteProfileString(__int64 a1, __int64 a2, __int64 a3); | |
size_t __fastcall GetProfileStringServiceBinding(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5); | |
_BOOL8 __fastcall WriteProfileStringServiceBinding(__int64 a1, __int64 a2, __int64 a3); | |
size_t __fastcall GetProfileStringNetLinks(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5); | |
_BOOL8 __fastcall WriteProfileStringNetLinks(__int64 a1, __int64 a2, __int64 a3); | |
size_t __fastcall Get_Profile_String(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5); | |
_BOOL8 __fastcall Set_Profile_String(__int64 a1, __int64 a2, __int64 a3); | |
_BOOL8 __fastcall Get_Profile_Boolean(__int64 a1, __int64 a2, int a3); | |
_BOOL8 __fastcall Set_Profile_Boolean(__int64 a1, __int64 a2, int a3); | |
int __fastcall Get_Profile_Integer(__int64 a1, __int64 a2, unsigned int a3); | |
_BOOL8 __fastcall Set_Profile_Integer(__int64 a1, __int64 a2, unsigned int a3); | |
size_t __fastcall Get_Private_Profile_String(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5, __int64 a6); | |
_BOOL8 __fastcall Set_Private_Profile_String(__int64 a1, __int64 a2, __int64 a3, __int64 a4); | |
_BOOL8 __fastcall Get_Private_Profile_Boolean(__int64 a1, __int64 a2, int a3, __int64 a4); | |
_BOOL8 __fastcall Set_Private_Profile_Boolean(__int64 a1, __int64 a2, int a3, __int64 a4); | |
int __fastcall Get_Private_Profile_Integer(__int64 a1, __int64 a2, unsigned int a3, __int64 a4); | |
int __fastcall Get_Private_Profile_Integer_NoLock(const char *a1, const char *a2, unsigned int a3, const char *a4); | |
_BOOL8 __fastcall Set_Private_Profile_Integer(__int64 a1, __int64 a2, unsigned int a3, __int64 a4); | |
_BOOL8 __fastcall Set_Private_Profile_Long(__int64 a1, __int64 a2, __int64 a3, __int64 a4); | |
_BOOL8 __fastcall Set_Private_Profile_Longlong(__int64 a1, __int64 a2, __int64 a3, __int64 a4); | |
char *__fastcall File_Fgets(FILE *a1); | |
__int64 __fastcall Comp_Config_Disk_SN(const char *a1, const char *a2); | |
__int64 __fastcall Conf_Dir_Wirte_Section_To_File(__int64 a1, const char *a2, char *a3); | |
__int64 __fastcall conf_get_field(const char *a1, const char *a2, const char *a3, char *a4, int a5); | |
__int64 __fastcall is_black_str(__int64 a1); | |
_BOOL8 __fastcall is_tc_word(_BYTE *a1); | |
_BOOL8 __fastcall is_sc_word(_BYTE *a1); | |
_BOOL8 __fastcall is_jis_word(_BYTE *a1); | |
_BOOL8 __fastcall is_korea_word(_BYTE *a1); | |
__int64 __fastcall Is_Mb_Word(_BYTE *a1); | |
__int64 __fastcall Is_Mb_String(_BYTE *a1); | |
__int64 __fastcall Is_Mb_Word_By_Codepage(_BYTE *a1, int a2); | |
__int64 __fastcall sub_186DE(_BYTE *a1, const char *a2); | |
__int64 __fastcall Is_Legal_String(_BYTE *a1); | |
__int64 __fastcall Is_Share_Legal_String(_BYTE *a1); | |
__int64 __fastcall Is_Share_Path_Legal_String(_BYTE *a1); | |
__int64 __fastcall Is_No_LineBreaks_String(_BYTE *a1); | |
__int64 __fastcall mb_strcmp(char *a1, char *a2); | |
__int64 __fastcall mb_strcasecmp(const char *a1, const char *a2); | |
__int64 __fastcall mb_strcmp_ex(char *a1, char *a2, int a3); | |
void err_lock(); | |
const char *__fastcall get_filename(const char *a1); | |
_BOOL8 __fastcall timeout(int a1); | |
__int64 __fastcall NAS_File_Lock(const char *a1, char a2); | |
__int64 __fastcall NAS_File_Unlock(const char *a1); | |
__int64 __fastcall Is_Exist_Another_Instance(const char *a1); | |
__int64 Become_Daemon(); // weak | |
__int64 __fastcall sub_19184(unsigned __int16 a1); | |
__int64 __fastcall sub_1919E(unsigned __int8 a1, unsigned __int16 a2); | |
__int64 __fastcall uart_start_row(int a1, char a2); | |
__int64 __fastcall uart_prog_8byte(int a1, char a2, char *a3); | |
int __fastcall uart_update_firmware_to_mcu(int a1, __int64 a2, unsigned int a3); | |
_BOOL8 __fastcall is_pic_raw_running(unsigned int *a1); | |
int __fastcall set_fan_pwm(const char *a1, unsigned int a2); | |
int __fastcall set_fan_pwm_2(int a1); | |
__int64 get_fan_pwm(); // weak | |
double __fastcall sub_19E90(const char *a1); | |
double __fastcall sub_19F5E(double a1); | |
__int64 Get_Hwmon_All_Status(); // weak | |
__int64 __fastcall sub_1A160(int a1); | |
__int64 sub_1A1D7(); | |
__int64 __fastcall Set_Buzzer_Status(unsigned int a1); | |
__int64 __fastcall Pic_Send_Raw_Cmd(unsigned int a1); | |
__int64 __fastcall Pic_Send_Raw_Cmds(unsigned __int16 *a1, int a2); | |
__int64 __fastcall Pic_Send_Read_EEPROM(char a1, unsigned __int8 a2, __int64 a3); | |
__int64 __fastcall Pic_Send_Write_EEPROM(char a1, unsigned __int8 a2, __int64 a3); | |
__int64 __fastcall Pic_Read_Byte(char a1, unsigned __int8 a2, __int64 a3); | |
__int64 __fastcall Pic_Send_Message(__int16 a1, __int16 a2); | |
__int64 __fastcall Pic_Send_Write_To_MCU(__int64 a1, unsigned int a2); | |
__int64 __fastcall Pic_Backup_Block_Area(__int64 a1); | |
__int64 __fastcall Pic_Send_Read_Write_DIDO(__int64 a1); | |
__int64 __fastcall Pic_Read_Write(__int64 a1); | |
int sub_1AB0A(); | |
__int64 __fastcall sub_1AB66(unsigned int a1); | |
__int64 stop_pic_raw(); // weak | |
__int64 __fastcall Util_Send_Message(int a1, const char *a2, int a3, __int64 a4); | |
_BOOL8 __fastcall Set_LOGO_LED_Mode(unsigned int a1); | |
_BOOL8 __fastcall Set_Buzzer_Quiet_Mode(int a1); | |
__int64 Get_Buzzer_Quiet_Mode(); // weak | |
__int64 lock_system_update(); // weak | |
int unlock_system_update(); | |
__int64 Is_System_Update_Locked(); // weak | |
__int64 Is_Live_Update_In_Progress(); // weak | |
__int64 __fastcall Touch_File(const char *a1); | |
_BOOL8 Is_App_Install_In_Progress(); | |
_BOOL8 __fastcall Is_File_Exist(char *a1); | |
char *__fastcall sub_1AFF0(__int64 a1, unsigned __int8 *a2, _DWORD *a3); | |
__int64 __fastcall Is_Alphabet_Num(_BYTE *a1); | |
__int64 __fastcall Is_Valid_Servername(_BYTE *a1); | |
__int64 __fastcall Is_Valid_Email(const char *a1); | |
__int64 __fastcall Base64_Decode(__int64 a1, unsigned __int8 *a2); | |
__int64 __fastcall sub_1B5E8(char *a1, unsigned __int8 *a2, int a3); | |
__int64 __fastcall Base64_Encode(__int64 a1, unsigned __int8 *a2, int a3); | |
__int64 __fastcall XOR_Encrypt(__int64 a1, int a2, int a3); | |
__int64 __fastcall Is_SUID_ENC_SALT_V2(const char *a1); | |
__int64 __fastcall str_to_hex(const char *a1, __int64 a2, int a3); | |
__int64 __fastcall AES_QTS_Encrypt(__int64 a1, int a2, void *a3, const char *a4, int a5); | |
char *__fastcall Password_Encode(const char *a1, int a2, int a3); | |
char *__fastcall Password_Decode(const char *a1, int a2); | |
__int64 model_is_pro(); // weak | |
__int64 get_hw_type(); // weak | |
unsigned int sync_cmd(); | |
__int64 __fastcall getQPKGDisplayNameIndex(const char *a1); | |
char *__fastcall Get_Random_Digit_String(int a1); | |
__int64 __fastcall Get_Random_String(char *a1, int a2); | |
__int64 __fastcall Get_Flash_Config(__int64 a1, unsigned int a2, __int64 a3); | |
__int64 __fastcall Set_Flash_Config(__int64 a1, __int64 a2); | |
__int64 __fastcall iface_get_hwaddr(const char *a1, char *a2, int a3); | |
__int64 __fastcall Get_Sys_HWaddr(char *a1); | |
__int64 check_nas_config(); // weak | |
__int64 __fastcall iface_set_hwaddr(const char *a1, __int64 a2, __int64 a3); | |
__int64 __fastcall Set_Sys_HWaddr(__int64 a1); | |
__int64 __fastcall Get_Sys_HWtype(_DWORD *a1); | |
__int64 __fastcall Set_Sys_HWtype(int a1); | |
__int64 Create_HWtypeFile(); // weak | |
__int64 __fastcall Get_Str_By_Offset(const char *a1, __off64_t a2, int a3, char *a4); | |
__int64 __fastcall Remove_Last_Chars(const char *a1, int a2); | |
__int64 __fastcall Get_QPKG_Encrypt_String(char *a1, char *a2); | |
__int64 __fastcall Get_QPKG_Auth_Encrypt_String(char *a1, char *a2); | |
_BOOL8 __fastcall Is_QNAPFlag_Exist(const char *a1, const char *a2); | |
__int64 __fastcall Get_QNAPFlag_File_Info(const char *a1, char *a2); | |
__int64 __fastcall Is_QPKG_FW_Match(const char *a1); | |
_BOOL8 __fastcall Is_QNAP_QPKG(const char *a1); | |
_BOOL8 __fastcall Is_QNAP_Auth_QPKG(const char *a1); | |
__int64 __fastcall Set_QPKG_Encrypt(const char *a1); | |
__int64 __fastcall Set_QPKG_Auth_Encrypt(const char *a1); | |
__int64 __fastcall Set_QPKG_FW_Version(const char *a1); | |
__int64 __fastcall Set_QPKG_Flag(const char *a1, int a2, const char *a3); | |
__int64 __fastcall Get_One_QFIX_Info(const char *a1, __int64 a2); | |
__int64 __fastcall Get_All_QFIX_Info(void **a1); | |
__int64 __fastcall Get_One_QPKG_Info(const char *a1, __int64 a2); | |
__int64 __fastcall Get_One_QPKG_Info_Dir(__int64 a1, const char *a2, __int64 a3); | |
__int64 __fastcall sub_1F8BD(__int64 a1); | |
__int64 __fastcall Get_All_QPKG_Info(void **a1); | |
_BOOL8 __fastcall Is_QPKG_Installed(__int64 a1); | |
_BOOL8 __fastcall Is_SYS_QPKG_Removed(const char *a1); | |
__int64 __fastcall Set_QPKG_Disable_by_Default(const char *a1); | |
__int64 __fastcall Unset_QPKG_Disable_by_Default(const char *a1); | |
__int64 Get_EEPROM_Hwaddr(); // weak | |
__int64 __fastcall Get_Eth_Magic_Num(const char *a1, int *a2); | |
__int64 Set_EEPROM_Hwaddr(); // weak | |
__int64 Reset_EEPROM_To_Default(); // weak | |
_BOOL8 __fastcall sub_202AD(_BYTE *a1); | |
__int64 Is_Needed_Reset_EEPRM(); // weak | |
__int64 __fastcall Get_Firmware_MD5_Checksum(char *a1, int a2); | |
__int64 __fastcall Set_Firmware_MD5_Checksum(const char *a1); | |
__int64 __fastcall Get_Firmware_Checksum(char *a1, int a2); | |
__int64 __fastcall Set_Firmware_Checksum(const char *a1); | |
_BOOL8 __fastcall IS_IPv4_Address(const char *a1); | |
_BOOL8 __fastcall IS_IPv6_Address(const char *a1); | |
__int64 sub_20679(); | |
__int64 __fastcall sub_20700(__int64 a1); | |
__int64 __fastcall sub_20782(char *a1, int a2); | |
__int64 __fastcall sub_20846(const char *a1); | |
__kernel_long_t sub_208A4(); | |
__int64 __fastcall Get_External_IP(char *a1, int a2); | |
__int64 __fastcall Get_Multimedia_Share_Path(char *a1); | |
_BOOL8 __fastcall Is_Sound_Card_Playback_Running(unsigned int a1); | |
__int64 Stop_Local_Audio_Playback(); // weak | |
_BOOL8 Is_Local_Audio_Playing(); | |
__int64 __fastcall Get_One_Audio_Alarm_Info(unsigned int a1, __int64 a2); | |
__int64 __fastcall Set_One_Audio_Alarm_Info(__int64 a1); | |
size_t __fastcall remove_tail_linefeed(const char *a1); | |
_BYTE *__fastcall trim_newline_carriage(__int64 a1); | |
_BYTE *__fastcall escape_str(const char *a1); | |
__int64 __fastcall Get_Serial_Number(char *a1, int a2); | |
__int64 __fastcall Get_Mac_Address(char *a1, int a2); | |
__int64 __fastcall Get_Specify_ID(const char *a1, char *a2, int a3); | |
__int64 __fastcall Get_Device_SUID(char *a1, int a2); | |
__int64 __fastcall Get_Device_SUID_Ex(void *a1, signed int a2); | |
__int64 __fastcall Set_Device_SUID(const char *a1); | |
__int64 Get_Country_Code(); // weak | |
__int64 __fastcall Set_Country_Code(int a1); | |
__int64 __fastcall getCountryCodeIndex(int a1); | |
__int64 __fastcall getCountryCodeIndexByAbbr(const char *a1); | |
__int64 __fastcall getFunctionCodeIndex(int a1); | |
__int64 __fastcall Get_Model_Prefix(char *a1); | |
__int64 __fastcall Set_Model_Prefix(const char *a1); | |
__int64 __fastcall Get_LED_Night_Mode_Status(_DWORD *a1); | |
__int64 __fastcall Set_LED_Night_Mode_Status(unsigned int *a1, int a2); | |
__int64 __fastcall Get_QOS_Lang(const char *a1, char *a2, signed int a3); | |
__int64 __fastcall Is_Valid_Source(const char *a1); | |
_BOOL8 __fastcall sub_22D74(int a1); | |
__int64 __fastcall sub_22D8C(int a1); | |
__int64 __fastcall utf8_strtolower(_BYTE *a1, __int64 a2); | |
__int64 __fastcall utf8_strcasecmp(_BYTE *a1, _BYTE *a2); | |
__int64 __fastcall utf8_strncasecmp(_BYTE *a1, _BYTE *a2, __int64 a3); | |
__int64 __fastcall mkdir_p(const char *a1, __mode_t a2); | |
__int64 __fastcall sub_231EA(const char *a1, const char *a2); | |
__int64 __fastcall QNAP_Version_Compare(const char *a1, const char *a2); | |
__int64 __fastcall Set_Encode_Field_To_Private_Conf(__int64 a1, __int64 a2, const char *a3, int a4, __int64 a5); | |
__int64 __fastcall Get_Decode_Field_From_Private_Conf(__int64 a1, __int64 a2, const char *a3, char *a4, int a5, int a6, __int64 a7); | |
__int64 __fastcall Get_Device_CUID(char *a1, int a2); | |
__int64 __fastcall Set_Device_CUID(const char *a1); | |
_BYTE *__fastcall Skip_Unicode_Control_Characters(_BYTE *a1); | |
__int64 __fastcall sub_23C97(char *a1, char *a2, void *a3, unsigned __int64 a4, char *a5); | |
__int64 __fastcall QNAP_Digest_MD5(char *a1, char *a2, void *a3, unsigned __int64 a4); | |
__int64 __fastcall QNAP_Digest_SHA256(char *a1, char *a2, void *a3, unsigned __int64 a4); | |
__int64 __fastcall QNAP_Digest_SHA1(char *a1, char *a2, void *a3, unsigned __int64 a4); | |
__int64 __fastcall sub_23E57(const char *a1); | |
void __fastcall sub_23EE2(const char *a1); | |
__int64 __fastcall sub_23F86(const char *a1, char *a2, int a3); | |
__int64 __fastcall sub_2405B(const char *a1, char *a2, int a3); | |
__int64 __fastcall sub_24130(const char *a1, char *a2, int a3); | |
__int64 __fastcall sub_2423B(const char *a1, char *a2, int a3, char *a4, int a5); | |
__int64 __fastcall sub_24365(_BYTE *a1, const char *a2, char *a3, int a4); | |
__int64 __fastcall sub_2446F(int a1, __int64 a2, int a3); | |
_BOOL8 __fastcall sub_24502(_BYTE *a1, const char *a2); | |
__int64 __fastcall QNAP_MAC_To_Cloudkey(const char *a1, char *a2, int a3); | |
__int64 __fastcall QNAP_Cloudkey_To_MAC(const char *a1, char *a2, int a3); | |
int init_debugger(); | |
FILE **finish_debugger(); | |
_BOOL8 __fastcall sub_24DA9(char *a1); | |
__int64 __fastcall sub_24DFC(FILE *a1); | |
__int64 __fastcall sub_24EF0(const char *a1); | |
__int64 __fastcall sub_24F33(__int64 a1, const char *a2); | |
__int64 __fastcall sub_24FFF(const char *a1, char *a2); | |
__int64 __fastcall sub_2517D(int a1); | |
__int64 __fastcall sub_251AB(char *a1, __int64 a2, __int64 a3); | |
__int64 __fastcall sub_2529F(char *a1); | |
__int64 __fastcall sub_253D9(char *a1); | |
void __fastcall sub_25530(char *a1); | |
char *__fastcall sub_25626(const char *a1, int a2); | |
__int64 __fastcall sub_256B0(__int64 a1); | |
unsigned int *sub_25729(); | |
unsigned int *sub_257A5(); | |
_BOOL8 __fastcall sub_25928(char a1); | |
__int64 __fastcall sub_2596B(const char *a1, __int64 a2); | |
__int64 __fastcall sub_25B57(const char *a1, __int64 a2, __int64 a3, unsigned int a4); | |
__int64 __fastcall sub_25DA3(const char *a1); | |
char *__fastcall sub_25E5A(const char *a1); | |
int *sub_25E8B(); | |
__int64 __fastcall sub_25ED6(const char *a1); | |
__int64 __fastcall sub_261BD(const char *a1); | |
void __fastcall sub_2621E(const char *a1, char *a2); | |
char *__fastcall sub_26362(char *a1, signed int a2); | |
void __fastcall sub_263AC(char *a1); | |
void __fastcall sub_263F8(__int64 a1, int a2); | |
void sub_268B4(); | |
void sub_26944(); | |
__int64 __fastcall sub_26C76(char *a1); | |
__int64 __fastcall sub_26D33(char *a1); | |
__int64 __fastcall sub_26E75(const char *a1); | |
FILE *sub_26FE8(); | |
_BOOL8 sub_2714C(); | |
int sub_27169(); | |
int sub_2717E(); | |
int sub_27193(); | |
__int64 __fastcall sub_274C6(const char *a1); | |
__int64 __fastcall sub_27563(const char *a1, unsigned int a2, unsigned int a3); | |
__int64 __fastcall sub_2772E(const char *a1); | |
__int64 __fastcall sub_2793C(const char *a1); | |
__int64 sub_27B6B(); | |
__int64 sub_27C42(); | |
FILE **check_for_startup(); | |
__int64 NAS_Send_LCD_MSG(); // weak | |
__int64 __fastcall SendErrMsgToLcd(int a1, unsigned int a2); | |
__int64 __fastcall SendEnterStateToLcd(int a1); | |
__int64 __fastcall SendNotificationToLcd(int a1); | |
__int64 __fastcall SendHalExtentErrMsgToLcd(int a1, int a2, unsigned int a3); | |
__int64 __fastcall SendHalExtentNoticeToLcd(int a1, int a2); | |
__int64 __fastcall SendEVToLogEngine(int a1, const char *a2, const char *a3, const char *a4, const char *a5); | |
__int64 SendEVToLogEngineEx(int a1, const char *a2, const char *a3, const char *a4, const char *a5, ...); | |
__int64 __fastcall SendConnToLogEngine(int a1, const char *a2, const char *a3, const char *a4, int a5, int a6, const char *a7); | |
__int64 SendConnToLogEngineEx(int a1, const char *a2, const char *a3, const char *a4, int a5, int a6, char *format, ...); | |
__int64 SendConnToLogEngineEx2(int a1, const char *a2, const char *a3, const char *a4, const char *a5, int a6, int a7, char *format, ...); | |
__int64 SendConnToLogEngineEx3(int a1, const char *a2, const char *a3, const char *a4, const char *a5, int a6, int a7, char *format, int a9, ...); | |
__int64 SendConnToLogEngineEx4(int a1, const char *a2, const char *a3, const char *a4, const char *a5, int a6, int a7, int a8, const char *a9, const char *a10, const char *a11, char *format, ...); | |
__int64 __fastcall SendNoticeToLogEngine_V2(int a1, unsigned int a2, unsigned int a3, const char *a4, int a5, const char *a6, int a7, int a8, int a9, const char *a10, const char *a11, const char *a12, const char *a13, int a14, const char *a15, const char *a16, const char *a17, const char *a18, const char *a19); | |
__int64 __fastcall SendNoticeToLogEngine(int a1, unsigned int a2, unsigned int a3, const char *a4, int a5, const char *a6, int a7, int a8, int a9, const char *a10, const char *a11, const char *a12, const char *a13, int a14, const char *a15, const char *a16); | |
__int64 SendNoticeToLogEngineEx(int a1, unsigned int a2, unsigned int a3, const char *a4, int a5, const char *a6, int a7, int a8, int a9, const char *a10, const char *a11, const char *a12, const char *a13, int a14, const char *a15, char *format, ...); | |
__int64 __fastcall SendEVMsgidToLogEngine(int a1, const char *a2, const char *a3, const char *a4, const char *a5, const char *a6); | |
__int64 SendEVMsgidToLogEngineEx(int a1, const char *a2, const char *a3, const char *a4, const char *a5, const char *a6, ...); | |
__int64 SendEventToQSyslogd(); // weak | |
__int64 SendConnToQSyslogd(); // weak | |
char ***__fastcall set_proc_title_init(int a1, _QWORD *a2); | |
__int64 set_proc_title(const char *a1, ...); | |
_BYTE *__fastcall sub_29D78(_BYTE *a1, _BYTE *a2); | |
__int64 __fastcall sub_29EE1(const char *a1, __int64 a2); | |
__int64 __fastcall read_net_proc(const char *a1, __int64 a2); | |
int ctor_001(); | |
void dtor_001(); | |
int *__fastcall qnap_auto_close_fd(int *a1); | |
void *__fastcall qnap_auto_free_char(void **a1); | |
FILE *__fastcall qnap_auto_close_file(FILE **a1); | |
_QWORD *__fastcall qnap_auto_close_popen_file(_QWORD *a1); | |
void *__fastcall sub_2A21C(void **a1); | |
__int64 __fastcall qnap_mktmpname(char *a1); | |
size_t __fastcall erase_char(const char *a1); | |
const char *__fastcall stripe_white_space_tail(const char *a1); | |
_BOOL8 __fastcall string_ended_with_EOL(const char *a1); | |
__int64 __fastcall strip_EOL(const char *a1); | |
char *__fastcall combine_string(const char *a1, const char *a2); | |
char *__fastcall skip_to_EOL(FILE *a1); | |
_BYTE *__fastcall skip_white_space(_BYTE *a1); | |
__int64 __fastcall get_one_line_of_string(FILE *a1); | |
__int64 __fastcall get_uid_by_name(const char *a1); | |
__int64 __fastcall get_uid_by_name_from_file(const char *a1, const char *a2); | |
__int64 __fastcall get_gid_by_name(const char *a1); | |
int __fastcall sub_2A8F9(int a1); | |
__int64 __fastcall sub_2A9A4(unsigned int a1, int a2, int a3, const char *a4, unsigned __int8 a5, const char **a6); | |
__int64 __fastcall sub_2AE7A(unsigned int a1, int a2, int a3, const char *a4, unsigned __int8 a5, const char **a6); | |
__int64 __fastcall sub_2AF4F(const char *a1, const char *a2, const char *a3, unsigned __int8 a4, const char *a5, __int64 *a6); | |
__int64 qnap_exec(const char *a1, const char *a2, const char *a3, const char *a4, ...); | |
__int64 qnap_exec_glob(const char *a1, const char *a2, const char *a3, const char *a4, ...); | |
__int64 __fastcall qnap_exec_v(const char *a1, const char *a2, const char *a3, const char *a4, _QWORD *a5); | |
__int64 __fastcall qnap_exec_v2(const char *a1, const char *a2, const char *a3, const char *a4, int a5, int a6, const char *a7, _QWORD *a8); | |
__int64 qnap_exec_pipe(const char *a1, const char *a2, const char *a3, ...); | |
__int64 __fastcall sub_2B7F2(unsigned __int8 a1, const char *a2, __int64 *a3); | |
__int64 qnap_system(const char *a1, ...); | |
__int64 qnap_system_glob(const char *a1, ...); | |
FILE *__fastcall sub_2BAAD(char *a1, const char *a2, const char *a3, unsigned __int8 a4, char a5, const char **a6); | |
FILE *__fastcall sub_2BE5E(char *a1, unsigned __int8 a2, const char *a3, __int64 *a4); | |
FILE *qnap_popen(char *a1, const char *a2, ...); | |
FILE *qnap_popen_glob(char *a1, const char *a2, ...); | |
FILE *__fastcall sub_2C149(char *a1, const char *a2, const char *a3, unsigned __int8 a4, const char *a5, __int64 *a6); | |
FILE *qnap_popen_log(char *a1, const char *a2, const char *a3, const char *a4, ...); | |
FILE *qnap_popen_glob_log(char *a1, const char *a2, const char *a3, const char *a4, ...); | |
FILE *qnap_popen_pipe(const char *a1, ...); | |
__int64 __fastcall qnap_pclose(FILE *a1); | |
__int64 __fastcall qnap_pclose_pipe(__int64 a1); | |
__int64 __fastcall qnap_secure_exec(int a1, int a2, int a3, int a4, int a5, int a6, const char **a7, char a8, char *file, char *a10, int oflag, char *a12, int a13, const char *a14); | |
FILE *__fastcall qnap_secure_popen(char *a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int64 a6, char *a7, char a8, int a9, int a10, int a11, const char *a12, int a13, const char *a14); | |
__int64 __fastcall sub_2C9CF(char a1); | |
__int64 __fastcall sub_2CA69(char *a1, char *a2); | |
char *__fastcall sub_2CBC3(const char *a1, char *a2, int a3); | |
__int64 __fastcall sub_2CC2F(char *a1, char *a2); | |
__int64 __fastcall sub_2CEE9(__int64 a1, char *a2, char *a3); | |
__int64 __fastcall sub_2CF9D(__uid_t a1, char *a2, int a3); | |
void __fastcall sub_2D13D(__int64 a1); | |
__int64 __fastcall sub_2D1DB(const char *a1, char *a2, int a3); | |
char *qnap_sort_get_locale_of_display_language(); | |
void __fastcall qnap_sort_close(__int64 a1); | |
void *__fastcall qnap_sort_open(const char *a1); | |
__int64 __fastcall qnap_sort_compare(__int64 a1, char *a2, char *a3, int a4); | |
__int64 __fastcall qnap_scandir(const char *a1, char **a2, unsigned int a3); | |
int __fastcall sub_2D9E0(char *filename, struct stat64 *stat_buf); | |
int __fastcall sub_2D9F0(char *filename, struct stat64 *stat_buf); | |
void (__fastcall *sub_2DA00())(); | |
void term_proc(); | |
// DIR *opendir(const char *name); | |
// int __fastcall _cxa_finalize(void *); | |
// int alphasort64(const struct dirent64 **e1, const struct dirent64 **e2); | |
// int closedir(DIR *dirp); | |
// struct dirent64 *readdir64(DIR *dirp); | |
// __int64 Jv_RegisterClasses(void); weak | |
// __int64 ITM_deregisterTMCloneTable(void); weak | |
//------------------------------------------------------------------------- | |
// Data declarations | |
__int64 qword_20 = 64LL; // weak | |
int dword_7C = 6; // weak | |
char byte_2E29E[2] = { '\0', '\0' }; // weak | |
_UNKNOWN unk_2E32E; // weak | |
_UNKNOWN unk_2E884; // weak | |
_UNKNOWN unk_2EA9D; // weak | |
char asc_2EE09[2] = "/"; // weak | |
_UNKNOWN unk_2F51D; // weak | |
char byte_2FA8E[2] = { '\0', '\0' }; // weak | |
__int64 (__fastcall *off_235008)() = &ctor_001; // weak | |
__int64 qword_235018[] = { -1LL }; // weak | |
__int64 qword_235028 = 0LL; // weak | |
_UNKNOWN unk_235030; // weak | |
_UNKNOWN qfunctioncode; // weak | |
_UNKNOWN qcountrycode; // weak | |
char *qpkg_display_name[12] = | |
{ | |
"PlexMediaServer", | |
"Plex Media Server", | |
"XMail_phpxmail", | |
"XMail", | |
"VtigerCRM", | |
"vtiger CRM", | |
"Optware", | |
"Optware IPKG", | |
"djStation", | |
"DJ Station", | |
"PMS", | |
"PS3 Media Server" | |
}; // weak | |
tls_index_local stru_2355D0 = { 1uLL, 0uLL }; // weak | |
__int64 qword_2355E0 = 1LL; // weak | |
void *off_236100 = &off_236100; // idb | |
char MAP[1600] = | |
{ | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'S', | |
'y', | |
's', | |
't', | |
'e', | |
'm', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\x01', | |
'\0', | |
'\0', | |
'\0', | |
'S', | |
't', | |
'o', | |
'r', | |
'a', | |
'g', | |
'e', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\x02', | |
'\0', | |
'\0', | |
'\0', | |
'M', | |
'i', | |
's', | |
'c', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\x03', | |
'\0', | |
'\0', | |
'\0', | |
'L', | |
'D', | |
'A', | |
'P', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\x04', | |
'\0', | |
'\0', | |
'\0', | |
'W', | |
'e', | |
'b', | |
'F', | |
'S', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\x05', | |
'\0', | |
'\0', | |
'\0', | |
'S', | |
'a', | |
'm', | |
'b', | |
'a', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char message00[43] = "The system is unable to save your settings"; // weak | |
char message01[134] = "due to insufficient ramdisk space. If restarting the server does not solve the problem please contact support for further assistance."; // weak | |
int dword_23688C = -1; // weak | |
_UNKNOWN uart_start_isp; // weak | |
_UNKNOWN uart_stop_mcu; // weak | |
_UNKNOWN uart_erase_all; // weak | |
_UNKNOWN uart_erase_block; // weak | |
_UNKNOWN uart_erase_chip_en; // weak | |
_UNKNOWN uart_erase_page_en; // weak | |
_UNKNOWN uart_cmd_finish; // weak | |
_UNKNOWN uart_reset; // weak | |
char aCde31qaz000000[33] = "cde31qaz00000000000000005tgb9ijn"; // weak | |
_BYTE byte_236940[256] = | |
{ | |
0, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
0, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
1, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
1, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0 | |
}; // weak | |
int dword_236A40[32] = | |
{ | |
13, | |
19, | |
5, | |
15, | |
17, | |
6, | |
3, | |
18, | |
12, | |
10, | |
2, | |
14, | |
21, | |
22, | |
4, | |
7, | |
20, | |
8, | |
16, | |
1, | |
23, | |
9, | |
11, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0 | |
}; // weak | |
_DWORD dword_236AC0[24] = { 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0 }; // weak | |
char oui_map[7] = "00089B"; // weak | |
char *off_236B48 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; // idb | |
char g_app_name[64] = | |
{ | |
'\xBE', | |
'\xB6', | |
'\xC8', | |
'\xC6', | |
'\xD8', | |
'\xD5', | |
'\xCC', | |
'\xD7', | |
'\xDC', | |
'\xC0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char found_malware_msg_1[192] = | |
{ | |
'\xBE', | |
'\xB6', | |
'\xC8', | |
'\xC6', | |
'\xD8', | |
'\xD5', | |
'\xCC', | |
'\xD7', | |
'\xDC', | |
'\xC0', | |
'\x83', | |
'\xA7', | |
'\xC8', | |
'\xD7', | |
'\xC8', | |
'\xC6', | |
'\xD7', | |
'\xC8', | |
'\xC7', | |
'\x83', | |
'\xD8', | |
'\xD1', | |
'\xC4', | |
'\xD8', | |
'\xD7', | |
'\xCB', | |
'\xD2', | |
'\xD5', | |
'\xCC', | |
'\xDD', | |
'\xC8', | |
'\xC7', | |
'\x83', | |
'\xC6', | |
'\xCB', | |
'\xC4', | |
'\xD1', | |
'\xCA', | |
'\xC8', | |
'\xD6', | |
'\x83', | |
'\xD7', | |
'\xD2', | |
'\x83', | |
'\xC4', | |
'\xD3', | |
'\xD3', | |
'\xCF', | |
'\xCC', | |
'\xC6', | |
'\xC4', | |
'\xD7', | |
'\xCC', | |
'\xD2', | |
'\xD1', | |
'\xD6', | |
'\x83', | |
'\x8B', | |
'\xDE', | |
'\x93', | |
'\xE0', | |
'\x8C', | |
'\x91', | |
'\x83', | |
'\xA6', | |
'\xCB', | |
'\xC4', | |
'\xD1', | |
'\xCA', | |
'\xC8', | |
'\x83', | |
'\xC4', | |
'\xCF', | |
'\xCF', | |
'\x83', | |
'\xD8', | |
'\xD6', | |
'\xC8', | |
'\xD5', | |
'\x83', | |
'\xC4', | |
'\xC6', | |
'\xC6', | |
'\xD2', | |
'\xD8', | |
'\xD1', | |
'\xD7', | |
'\x83', | |
'\xD3', | |
'\xC4', | |
'\xD6', | |
'\xD6', | |
'\xDA', | |
'\xD2', | |
'\xD5', | |
'\xC7', | |
'\xD6', | |
'\x83', | |
'\xCC', | |
'\xD0', | |
'\xD0', | |
'\xC8', | |
'\xC7', | |
'\xCC', | |
'\xC4', | |
'\xD7', | |
'\xC8', | |
'\xCF', | |
'\xDC', | |
'\x83', | |
'\xC4', | |
'\xD1', | |
'\xC7', | |
'\x83', | |
'\xD8', | |
'\xD3', | |
'\xC7', | |
'\xC4', | |
'\xD7', | |
'\xC8', | |
'\x83', | |
'\xB1', | |
'\xA4', | |
'\xB6', | |
'\x83', | |
'\xC9', | |
'\xCC', | |
'\xD5', | |
'\xD0', | |
'\xDA', | |
'\xC4', | |
'\xD5', | |
'\xC8', | |
'\x83', | |
'\xC4', | |
'\xD1', | |
'\xC7', | |
'\x83', | |
'\xC4', | |
'\xD3', | |
'\xD3', | |
'\xCF', | |
'\xCC', | |
'\xC6', | |
'\xC4', | |
'\xD7', | |
'\xCC', | |
'\xD2', | |
'\xD1', | |
'\xD6', | |
'\x83', | |
'\xD7', | |
'\xD2', | |
'\x83', | |
'\xD7', | |
'\xCB', | |
'\xC8', | |
'\x83', | |
'\xCF', | |
'\xC4', | |
'\xD7', | |
'\xC8', | |
'\xD6', | |
'\xD7', | |
'\x83', | |
'\xD9', | |
'\xC8', | |
'\xD5', | |
'\xD6', | |
'\xCC', | |
'\xD2', | |
'\xD1', | |
'\x91', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char found_malware_msg_2[256] = | |
{ | |
'\xBE', | |
'\xB6', | |
'\xC8', | |
'\xC6', | |
'\xD8', | |
'\xD5', | |
'\xCC', | |
'\xD7', | |
'\xDC', | |
'\xC0', | |
'\x83', | |
'\xA7', | |
'\xC8', | |
'\xD7', | |
'\xC8', | |
'\xC6', | |
'\xD7', | |
'\xC8', | |
'\xC7', | |
'\x83', | |
'\xD8', | |
'\xD1', | |
'\xC4', | |
'\xD8', | |
'\xD7', | |
'\xCB', | |
'\xD2', | |
'\xD5', | |
'\xCC', | |
'\xDD', | |
'\xC8', | |
'\xC7', | |
'\x83', | |
'\xC6', | |
'\xCB', | |
'\xC4', | |
'\xD1', | |
'\xCA', | |
'\xC8', | |
'\xD6', | |
'\x83', | |
'\xD7', | |
'\xD2', | |
'\x83', | |
'\x85', | |
'\xC4', | |
'\xD8', | |
'\xD7', | |
'\xD2', | |
'\xD5', | |
'\xD8', | |
'\xD1', | |
'\x91', | |
'\xD6', | |
'\xCB', | |
'\x85', | |
'\x91', | |
'\x83', | |
'\xA6', | |
'\xCB', | |
'\xC4', | |
'\xD1', | |
'\xCA', | |
'\xC8', | |
'\x83', | |
'\xC4', | |
'\xCF', | |
'\xCF', | |
'\x83', | |
'\xD8', | |
'\xD6', | |
'\xC8', | |
'\xD5', | |
'\x83', | |
'\xC4', | |
'\xC6', | |
'\xC6', | |
'\xD2', | |
'\xD8', | |
'\xD1', | |
'\xD7', | |
'\x83', | |
'\xD3', | |
'\xC4', | |
'\xD6', | |
'\xD6', | |
'\xDA', | |
'\xD2', | |
'\xD5', | |
'\xC7', | |
'\xD6', | |
'\x83', | |
'\xCC', | |
'\xD0', | |
'\xD0', | |
'\xC8', | |
'\xC7', | |
'\xCC', | |
'\xC4', | |
'\xD7', | |
'\xC8', | |
'\xCF', | |
'\xDC', | |
'\x8F', | |
'\x83', | |
'\xD8', | |
'\xD3', | |
'\xC7', | |
'\xC4', | |
'\xD7', | |
'\xC8', | |
'\x83', | |
'\xB1', | |
'\xA4', | |
'\xB6', | |
'\x83', | |
'\xC9', | |
'\xCC', | |
'\xD5', | |
'\xD0', | |
'\xDA', | |
'\xC4', | |
'\xD5', | |
'\xC8', | |
'\x83', | |
'\xC4', | |
'\xD1', | |
'\xC7', | |
'\x83', | |
'\xC4', | |
'\xD3', | |
'\xD3', | |
'\xCF', | |
'\xCC', | |
'\xC6', | |
'\xC4', | |
'\xD7', | |
'\xCC', | |
'\xD2', | |
'\xD1', | |
'\xD6', | |
'\x83', | |
'\xD7', | |
'\xD2', | |
'\x83', | |
'\xD7', | |
'\xCB', | |
'\xC8', | |
'\x83', | |
'\xCF', | |
'\xC4', | |
'\xD7', | |
'\xC8', | |
'\xD6', | |
'\xD7', | |
'\x83', | |
'\xD9', | |
'\xC8', | |
'\xD5', | |
'\xD6', | |
'\xCC', | |
'\xD2', | |
'\xD1', | |
'\x8F', | |
'\x83', | |
'\xC4', | |
'\xD1', | |
'\xC7', | |
'\x83', | |
'\xC6', | |
'\xCB', | |
'\xC8', | |
'\xC6', | |
'\xCE', | |
'\x83', | |
'\xC4', | |
'\xD8', | |
'\xD7', | |
'\xD2', | |
'\xD5', | |
'\xD8', | |
'\xD1', | |
'\x91', | |
'\xD6', | |
'\xCB', | |
'\x83', | |
'\xC9', | |
'\xD2', | |
'\xD5', | |
'\x83', | |
'\xC4', | |
'\xC5', | |
'\xD1', | |
'\xD2', | |
'\xD5', | |
'\xD0', | |
'\xC4', | |
'\xCF', | |
'\x83', | |
'\xC8', | |
'\xD1', | |
'\xD7', | |
'\xD5', | |
'\xCC', | |
'\xC8', | |
'\xD6', | |
'\x91', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char found_malware_msg_3[160] = | |
{ | |
'\xBE', | |
'\xB6', | |
'\xC8', | |
'\xC6', | |
'\xD8', | |
'\xD5', | |
'\xCC', | |
'\xD7', | |
'\xDC', | |
'\xC0', | |
'\x83', | |
'\xA7', | |
'\xC8', | |
'\xD7', | |
'\xC8', | |
'\xC6', | |
'\xD7', | |
'\xC8', | |
'\xC7', | |
'\x83', | |
'\xD8', | |
'\xD1', | |
'\xC4', | |
'\xD8', | |
'\xD7', | |
'\xCB', | |
'\xD2', | |
'\xD5', | |
'\xCC', | |
'\xDD', | |
'\xC8', | |
'\xC7', | |
'\x83', | |
'\xC6', | |
'\xCB', | |
'\xC4', | |
'\xD1', | |
'\xCA', | |
'\xC8', | |
'\xD6', | |
'\x83', | |
'\xD7', | |
'\xD2', | |
'\x83', | |
'\xB4', | |
'\xB7', | |
'\xB6', | |
'\x91', | |
'\x83', | |
'\xA6', | |
'\xCB', | |
'\xC4', | |
'\xD1', | |
'\xCA', | |
'\xC8', | |
'\x83', | |
'\xC4', | |
'\xCF', | |
'\xCF', | |
'\x83', | |
'\xD8', | |
'\xD6', | |
'\xC8', | |
'\xD5', | |
'\x83', | |
'\xC4', | |
'\xC6', | |
'\xC6', | |
'\xD2', | |
'\xD8', | |
'\xD1', | |
'\xD7', | |
'\x83', | |
'\xD3', | |
'\xC4', | |
'\xD6', | |
'\xD6', | |
'\xDA', | |
'\xD2', | |
'\xD5', | |
'\xC7', | |
'\xD6', | |
'\x83', | |
'\xCC', | |
'\xD0', | |
'\xD0', | |
'\xC8', | |
'\xC7', | |
'\xCC', | |
'\xC4', | |
'\xD7', | |
'\xC8', | |
'\xCF', | |
'\xDC', | |
'\x83', | |
'\xC4', | |
'\xD1', | |
'\xC7', | |
'\x83', | |
'\xD8', | |
'\xD3', | |
'\xC7', | |
'\xC4', | |
'\xD7', | |
'\xC8', | |
'\x83', | |
'\xB1', | |
'\xA4', | |
'\xB6', | |
'\x83', | |
'\xC9', | |
'\xCC', | |
'\xD5', | |
'\xD0', | |
'\xDA', | |
'\xC4', | |
'\xD5', | |
'\xC8', | |
'\x83', | |
'\xC4', | |
'\xD1', | |
'\xC7', | |
'\x83', | |
'\xC4', | |
'\xD3', | |
'\xD3', | |
'\xCF', | |
'\xCC', | |
'\xC6', | |
'\xC4', | |
'\xD7', | |
'\xCC', | |
'\xD2', | |
'\xD1', | |
'\xD6', | |
'\x83', | |
'\xD7', | |
'\xD2', | |
'\x83', | |
'\xD7', | |
'\xCB', | |
'\xC8', | |
'\x83', | |
'\xCF', | |
'\xC4', | |
'\xD7', | |
'\xC8', | |
'\xD6', | |
'\xD7', | |
'\x83', | |
'\xD9', | |
'\xC8', | |
'\xD5', | |
'\xD6', | |
'\xCC', | |
'\xD2', | |
'\xD1', | |
'\x91', | |
'\0', | |
'\0' | |
}; // weak | |
char qpkg_conf[32] = | |
{ | |
'\x92', | |
'\xC8', | |
'\xD7', | |
'\xC6', | |
'\x92', | |
'\xC6', | |
'\xD2', | |
'\xD1', | |
'\xC9', | |
'\xCC', | |
'\xCA', | |
'\x92', | |
'\xD4', | |
'\xD3', | |
'\xCE', | |
'\xCA', | |
'\x91', | |
'\xC6', | |
'\xD2', | |
'\xD1', | |
'\xC9', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char cmd_mount_flash_config[64] = | |
{ | |
'\x92', | |
'\xC8', | |
'\xD7', | |
'\xC6', | |
'\x92', | |
'\xCC', | |
'\xD1', | |
'\xCC', | |
'\xD7', | |
'\x91', | |
'\xC7', | |
'\x92', | |
'\xCC', | |
'\xD1', | |
'\xCC', | |
'\xD7', | |
'\xC2', | |
'\xC7', | |
'\xCC', | |
'\xD6', | |
'\xCE', | |
'\x91', | |
'\xD6', | |
'\xCB', | |
'\x83', | |
'\xD0', | |
'\xD2', | |
'\xD8', | |
'\xD1', | |
'\xD7', | |
'\xC2', | |
'\xC9', | |
'\xCF', | |
'\xC4', | |
'\xD6', | |
'\xCB', | |
'\xC2', | |
'\xC6', | |
'\xD2', | |
'\xD1', | |
'\xC9', | |
'\xCC', | |
'\xCA', | |
'\x83', | |
'\xA1', | |
'\x92', | |
'\xC7', | |
'\xC8', | |
'\xD9', | |
'\x92', | |
'\xD1', | |
'\xD8', | |
'\xCF', | |
'\xCF', | |
'\x83', | |
'\x95', | |
'\xA1', | |
'\x89', | |
'\x94', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char cmd_unmount_flash_config[64] = | |
{ | |
'\x92', | |
'\xC8', | |
'\xD7', | |
'\xC6', | |
'\x92', | |
'\xCC', | |
'\xD1', | |
'\xCC', | |
'\xD7', | |
'\x91', | |
'\xC7', | |
'\x92', | |
'\xCC', | |
'\xD1', | |
'\xCC', | |
'\xD7', | |
'\xC2', | |
'\xC7', | |
'\xCC', | |
'\xD6', | |
'\xCE', | |
'\x91', | |
'\xD6', | |
'\xCB', | |
'\x83', | |
'\xD8', | |
'\xD0', | |
'\xD2', | |
'\xD8', | |
'\xD1', | |
'\xD7', | |
'\xC2', | |
'\xC9', | |
'\xCF', | |
'\xC4', | |
'\xD6', | |
'\xCB', | |
'\xC2', | |
'\xC6', | |
'\xD2', | |
'\xD1', | |
'\xC9', | |
'\xCC', | |
'\xCA', | |
'\x83', | |
'\xA1', | |
'\x92', | |
'\xC7', | |
'\xC8', | |
'\xD9', | |
'\x92', | |
'\xD1', | |
'\xD8', | |
'\xCF', | |
'\xCF', | |
'\x83', | |
'\x95', | |
'\xA1', | |
'\x89', | |
'\x94', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char flash_config_mount_path[32] = | |
{ | |
'\x92', | |
'\xD7', | |
'\xD0', | |
'\xD3', | |
'\x92', | |
'\xD1', | |
'\xC4', | |
'\xD6', | |
'\xC6', | |
'\xD2', | |
'\xD1', | |
'\xC9', | |
'\xCC', | |
'\xCA', | |
'\xC2', | |
'\xD7', | |
'\xD0', | |
'\xD3', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char cmd_check_flash_config_mount[56] = | |
{ | |
'\x92', | |
'\xC5', | |
'\xCC', | |
'\xD1', | |
'\x92', | |
'\xD0', | |
'\xD2', | |
'\xD8', | |
'\xD1', | |
'\xD7', | |
'\xDF', | |
'\x92', | |
'\xC5', | |
'\xCC', | |
'\xD1', | |
'\x92', | |
'\xCA', | |
'\xD5', | |
'\xC8', | |
'\xD3', | |
'\x83', | |
'\x92', | |
'\xD7', | |
'\xD0', | |
'\xD3', | |
'\x92', | |
'\xD1', | |
'\xC4', | |
'\xD6', | |
'\xC6', | |
'\xD2', | |
'\xD1', | |
'\xC9', | |
'\xCC', | |
'\xCA', | |
'\xC2', | |
'\xD7', | |
'\xD0', | |
'\xD3', | |
'\x83', | |
'\xA1', | |
'\x92', | |
'\xC7', | |
'\xC8', | |
'\xD9', | |
'\x92', | |
'\xD1', | |
'\xD8', | |
'\xCF', | |
'\xCF', | |
'\x83', | |
'\x95', | |
'\xA1', | |
'\x89', | |
'\x94', | |
'\0' | |
}; // weak | |
char autorun_sh[24] = | |
{ | |
'\xC4', | |
'\xD8', | |
'\xD7', | |
'\xD2', | |
'\xD5', | |
'\xD8', | |
'\xD1', | |
'\x91', | |
'\xD6', | |
'\xCB', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char runonce[32] = | |
{ | |
'\x92', | |
'\xC8', | |
'\xD7', | |
'\xC6', | |
'\x92', | |
'\xC6', | |
'\xD2', | |
'\xD1', | |
'\xC9', | |
'\xCC', | |
'\xCA', | |
'\x92', | |
'\xD5', | |
'\xD8', | |
'\xD1', | |
'\xD2', | |
'\xD1', | |
'\xC6', | |
'\xC8', | |
'\x91', | |
'\xD6', | |
'\xCB', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char g_debug_file[24] = | |
{ | |
'\x92', | |
'\xD7', | |
'\xD0', | |
'\xD3', | |
'\x92', | |
'\xD0', | |
'\xC4', | |
'\xCF', | |
'\xDA', | |
'\xC4', | |
'\xD5', | |
'\xC8', | |
'\xC2', | |
'\xC7', | |
'\xC8', | |
'\xD7', | |
'\xC8', | |
'\xC6', | |
'\xD7', | |
'\x91', | |
'\xCF', | |
'\xD2', | |
'\xCA', | |
'\0' | |
}; // weak | |
char quarantine_dir[24] = | |
{ | |
'\x91', | |
'\xA3', | |
'\xD4', | |
'\xD8', | |
'\xC4', | |
'\xD5', | |
'\xC4', | |
'\xD1', | |
'\xD7', | |
'\xCC', | |
'\xD1', | |
'\xC8', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char g_internal_log_file[32] = | |
{ | |
'\x92', | |
'\xD0', | |
'\xD1', | |
'\xD7', | |
'\x92', | |
'\xAB', | |
'\xA7', | |
'\xA4', | |
'\xC2', | |
'\xB5', | |
'\xB2', | |
'\xB2', | |
'\xB7', | |
'\x92', | |
'\x91', | |
'\xCF', | |
'\xD2', | |
'\xCA', | |
'\xD6', | |
'\x92', | |
'\x91', | |
'\xD4', | |
'\xC7', | |
'\xC9', | |
'\xC7', | |
'\x91', | |
'\xCF', | |
'\xD2', | |
'\xCA', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char update_pkg_dir[32] = | |
{ | |
'\x92', | |
'\xD0', | |
'\xD1', | |
'\xD7', | |
'\x92', | |
'\xAB', | |
'\xA7', | |
'\xA4', | |
'\xC2', | |
'\xB5', | |
'\xB2', | |
'\xB2', | |
'\xB7', | |
'\x92', | |
'\xD8', | |
'\xD3', | |
'\xC7', | |
'\xC4', | |
'\xD7', | |
'\xC8', | |
'\xC2', | |
'\xD3', | |
'\xCE', | |
'\xCA', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char qts_cust_bin[32] = | |
{ | |
'\xB4', | |
'\xB7', | |
'\xB6', | |
'\xA6', | |
'\xD8', | |
'\xD6', | |
'\xD7', | |
'\xD2', | |
'\xD0', | |
'\xCC', | |
'\xDD', | |
'\xC4', | |
'\xD7', | |
'\xCC', | |
'\xD2', | |
'\xD1', | |
'\x91', | |
'\xC5', | |
'\xCC', | |
'\xD1', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
char qts_cust_sh[96] = | |
{ | |
'\x92', | |
'\xC8', | |
'\xD7', | |
'\xC6', | |
'\x92', | |
'\xCC', | |
'\xD1', | |
'\xCC', | |
'\xD7', | |
'\x91', | |
'\xC7', | |
'\x92', | |
'\xB4', | |
'\xB7', | |
'\xB6', | |
'\xA6', | |
'\xD8', | |
'\xD6', | |
'\xD7', | |
'\xD2', | |
'\xD0', | |
'\xCC', | |
'\xDD', | |
'\xC4', | |
'\xD7', | |
'\xCC', | |
'\xD2', | |
'\xD1', | |
'\xC2', | |
'\xCC', | |
'\xD1', | |
'\xCC', | |
'\xD7', | |
'\x91', | |
'\xD6', | |
'\xCB', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0', | |
'\0' | |
}; // weak | |
void *plain_keyword_download = &unk_2F430; // weak | |
void *plain_keyword_infect_script = &unk_2F441; // weak | |
void *plain_keyword_exec_decode = &unk_2F45D; // weak | |
void *plain_keyword_download_except = &unk_2F478; // weak | |
void *qnap_qpkg_dot_folder = &unk_2F4AE; // weak | |
void *g_system_file = &unk_2F502; // weak | |
_UNKNOWN file_type_infos; // weak | |
int dword_2371B0 = 5240; // weak | |
_UNKNOWN unk_2371C0; // weak | |
char *off_237280 = "ENG"; // weak | |
char *off_237288 = "en_US"; // weak | |
_UNKNOWN edata; // weak | |
_UNKNOWN unk_2373F7; // weak | |
char byte_237400; // weak | |
__int64 qword_237408; // weak | |
char dest[128]; // idb | |
char byte_2374C0[16]; // idb | |
char byte_2374D0[48]; // idb | |
int dword_237500; // weak | |
int dword_237504; // weak | |
pthread_mutex_t mutex; // idb | |
__int64 qword_237548; // weak | |
char byte_237550; // weak | |
__int64 qword_237558; // weak | |
char byte_237580[1024]; // idb | |
int dword_237980; // weak | |
unsigned int g_match_type; // weak | |
int g_match_keyword_count; // weak | |
unsigned int g_keyword_decrypted; // weak | |
unsigned int g_strings_decrypted; // weak | |
unsigned int found_special_malware; // weak | |
unsigned int notified_special_malware; // weak | |
FILE *g_debug_fp; // weak | |
__int64 qword_2379B0; // weak | |
size_t maxlen; // idb | |
regex_t preg; // idb | |
__int64 qword_237A00; // weak | |
pthread_rwlock_t rwlock; // idb | |
_QWORD g_match_keyword_list[1024]; // weak | |
// extern char **environ; | |
// extern struct _IO_FILE *stderr; | |
// extern _UNKNOWN _gmon_start__; weak | |
//----- (0000000000009B18) ---------------------------------------------------- | |
void (__fastcall *init_proc())() | |
{ | |
if ( &_gmon_start__ ) | |
__gmon_start__(); | |
sub_AEB0(); | |
return sub_2DA00(); | |
} | |
// 9DA0: using guessed type __int64 __gmon_start__(void); | |
//----- (0000000000009B40) ---------------------------------------------------- | |
void sub_9B40() | |
{ | |
JUMPOUT(0LL); | |
} | |
// 9B46: control flows out of bounds to 0 | |
//----- (000000000000ADA0) ---------------------------------------------------- | |
__int64 (**start())(void) | |
{ | |
__int64 (**result)(void); // rax | |
result = (__int64 (**)(void))(&unk_2373F7 - &edata); | |
if ( (unsigned __int64)(&unk_2373F7 - &edata) > 0xE ) | |
{ | |
result = &ITM_deregisterTMCloneTable; | |
if ( &ITM_deregisterTMCloneTable ) | |
return (__int64 (**)(void))ITM_deregisterTMCloneTable(); | |
} | |
return result; | |
} | |
// 23AFA8: using guessed type __int64 ITM_deregisterTMCloneTable(void); | |
//----- (000000000000ADE0) ---------------------------------------------------- | |
__int64 sub_ADE0() | |
{ | |
return 0LL; | |
} | |
//----- (000000000000AE30) ---------------------------------------------------- | |
void sub_AE30() | |
{ | |
__int64 v0; // rax | |
unsigned __int64 i; // rbx | |
if ( !byte_237400 ) | |
{ | |
if ( &_cxa_finalize ) | |
__cxa_finalize(off_236100); | |
v0 = qword_237408; | |
for ( i = &qword_235028 - qword_235018 - 1; qword_237408 < i; v0 = qword_237408 ) | |
{ | |
qword_237408 = v0 + 1; | |
((void (*)(void))qword_235018[v0 + 1])(); | |
} | |
start(); | |
byte_237400 = 1; | |
} | |
} | |
// 235018: using guessed type __int64 qword_235018[]; | |
// 235028: using guessed type __int64 qword_235028; | |
// 237400: using guessed type char byte_237400; | |
// 237408: using guessed type __int64 qword_237408; | |
//----- (000000000000AEB0) ---------------------------------------------------- | |
__int64 sub_AEB0() | |
{ | |
if ( unk_235030 && &Jv_RegisterClasses ) | |
Jv_RegisterClasses(); | |
return sub_ADE0(); | |
} | |
// 23AF70: using guessed type __int64 Jv_RegisterClasses(void); | |
//----- (000000000000AEE0) ---------------------------------------------------- | |
_BYTE *__fastcall local_skip_white_space(_BYTE *a1) | |
{ | |
while ( *a1 == 32 || *a1 == 9 ) | |
++a1; | |
return a1; | |
} | |
//----- (000000000000AF13) ---------------------------------------------------- | |
__int64 __fastcall local_conf_get_field(const char *a1, const char *a2, const char *a3, char *a4, int a5) | |
{ | |
size_t v6; // rdx | |
size_t v7; // rax | |
char s[1032]; // [rsp+30h] [rbp-450h] BYREF | |
char *src; // [rsp+438h] [rbp-48h] | |
char *v13; // [rsp+440h] [rbp-40h] | |
char *s1; // [rsp+448h] [rbp-38h] | |
char *v15; // [rsp+450h] [rbp-30h] | |
FILE *stream; // [rsp+458h] [rbp-28h] | |
int v17; // [rsp+464h] [rbp-1Ch] | |
char *i; // [rsp+468h] [rbp-18h] | |
v17 = 0; | |
stream = fopen64(a1, "r"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
if ( !a2 || !*a2 ) | |
v17 = 1; | |
while ( 1 ) | |
{ | |
do | |
{ | |
while ( 1 ) | |
{ | |
do | |
{ | |
if ( feof(stream) ) | |
{ | |
LABEL_43: | |
fclose(stream); | |
return 4294967290LL; | |
} | |
} | |
while ( !fgets(s, 1024, stream) ); | |
v15 = local_skip_white_space(s); | |
if ( *v15 != 91 ) | |
break; | |
s1 = v15 + 1; | |
v6 = strlen(v15 + 1) - 1; | |
for ( i = &s1[v6]; *i != 93 && i != s1; --i ) | |
; | |
if ( i == s1 ) | |
{ | |
if ( v17 ) | |
goto LABEL_20; | |
} | |
else | |
{ | |
if ( v17 ) | |
goto LABEL_43; | |
*i = 0; | |
s1 = local_skip_white_space(s1); | |
s1 = (char *)stripe_white_space_tail(s1); | |
if ( !strcasecmp(s1, a2) ) | |
v17 = 1; | |
} | |
} | |
} | |
while ( !v17 ); | |
LABEL_20: | |
if ( *v15 != 59 && *v15 != 35 ) | |
{ | |
i = v15; | |
v13 = v15; | |
while ( *i != 61 && *i ) | |
++i; | |
if ( *i ) | |
{ | |
*i = 0; | |
src = i + 1; | |
v13 = (char *)stripe_white_space_tail(v13); | |
if ( !strcasecmp(a3, v13) ) | |
break; | |
} | |
} | |
} | |
src = local_skip_white_space(src); | |
src = (char *)stripe_white_space_tail(src); | |
v7 = strlen(src); | |
for ( i = &src[v7 - 1]; (*i == 10 || *i == 13) && i != src; --i ) | |
; | |
if ( *i == 10 || *i == 13 ) | |
*i = 0; | |
i[1] = 0; | |
if ( a4 ) | |
{ | |
if ( a5 >= strlen(src) + 1 ) | |
{ | |
strcpy(a4, src); | |
fclose(stream); | |
return 0LL; | |
} | |
else | |
{ | |
fclose(stream); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
else | |
{ | |
fclose(stream); | |
return (unsigned int)strlen(src) + 1; | |
} | |
} | |
// A2C0: using guessed type __int64 __fastcall stripe_white_space_tail(_QWORD); | |
//----- (000000000000B27D) ---------------------------------------------------- | |
__int64 __fastcall get_tag_size(int a1) | |
{ | |
unsigned int v2; // [rsp+10h] [rbp-4h] | |
v2 = 0; | |
if ( a1 ) | |
{ | |
if ( a1 == 1 ) | |
return 272; | |
} | |
else | |
{ | |
return 528; | |
} | |
return v2; | |
} | |
//----- (000000000000B2AF) ---------------------------------------------------- | |
__int64 __fastcall SHM_Debug_Section(const char *a1) | |
{ | |
const char *v2; // [rsp+18h] [rbp-68h] | |
const char *v3; // [rsp+30h] [rbp-50h] | |
const char *v4; // [rsp+38h] [rbp-48h] | |
const char *v5; // [rsp+40h] [rbp-40h] | |
int v6; // [rsp+4Ch] [rbp-34h] | |
const char *shmaddr; // [rsp+58h] [rbp-28h] | |
int shmid; // [rsp+64h] [rbp-1Ch] | |
int v9; // [rsp+6Ch] [rbp-14h] | |
const char *v10; // [rsp+70h] [rbp-10h] | |
int i; // [rsp+7Ch] [rbp-4h] | |
shmid = shmget(9998, 0x1000uLL, 438); | |
if ( shmid == -1 ) | |
return 0LL; | |
shmaddr = (const char *)shmat(shmid, 0LL, 0); | |
if ( shmaddr == (const char *)-1LL ) | |
return 0LL; | |
v9 = 4; | |
v10 = shmaddr + 4; | |
for ( i = 0; *(_DWORD *)shmaddr > i; ++i ) | |
{ | |
v6 = v9 + 8; | |
if ( !strcasecmp(a1, &MAP[260 * i + 4]) ) | |
{ | |
switch ( i ) | |
{ | |
case 0: | |
v2 = &shmaddr[v6]; | |
printf("[%s]->model = %s\n", a1, v2); | |
printf("[%s]->server name = %s\n", a1, v2 + 16); | |
printf("[%s]->server comment = %s\n", a1, v2 + 32); | |
printf("[%s]->version = %s\n", a1, v2 + 160); | |
printf("[%s]->number = %s\n", a1, v2 + 192); | |
printf("[%s]->build = %s\n", a1, v2 + 208); | |
printf("[%s]->timezone = %s\n", a1, v2 + 240); | |
printf("[%s]->daylight = %s\n", a1, v2 + 304); | |
printf("[%s]->workgroup = %s\n", a1, v2 + 368); | |
printf("[%s]->system_dev = %s\n", a1, v2 + 400); | |
printf("[%s]->wan_access = %s\n", a1, v2 + 416); | |
printf("[%s]->lan_access = %s\n", a1, v2 + 432); | |
printf("[%s]->codepage = %s\n", a1, v2 + 448); | |
printf("[%s]->test_mode = %s\n", a1, v2 + 464); | |
printf("[%s]->auto_create_raid = %s\n", a1, v2 + 480); | |
printf("[%s]->www_port = %s\n", a1, v2 + 496); | |
printf("[%s]->acl_enable = %s\n", a1, v2 + 512); | |
goto LABEL_21; | |
case 1: | |
v5 = &shmaddr[v6]; | |
printf("[%s]->auto_init = %s\n", a1, v5 + 80); | |
printf("[%s]->check_on_boot = %s\n", a1, v5 + 64); | |
printf("[%s]->disk_number = %s\n", a1, v5 + 96); | |
printf("[%s]->drive 1 = %s\n", a1, v5); | |
printf("[%s]->drive 2 = %s\n", a1, v5 + 16); | |
printf("[%s]->drive 3 = %s\n", a1, v5 + 32); | |
printf("[%s]->drive 4 = %s\n", a1, v5 + 48); | |
printf("[%s]->auto_fix_error = %s\n", a1, v5 + 112); | |
printf("[%s]->support_raid5 = %s\n", a1, v5 + 128); | |
printf("[%s]->support_hotswap = %s\n", a1, v5 + 144); | |
printf("[%s]->drive dma 1 = %s\n", a1, v5 + 160); | |
printf("[%s]->drive dma 2 = %s\n", a1, v5 + 176); | |
printf("[%s]->drive dma 3 = %s\n", a1, v5 + 192); | |
printf("[%s]->drive dma 4 = %s\n", a1, v5 + 208); | |
printf("[%s]->support hotspare = %s\n", a1, v5 + 224); | |
printf("[%s]->nas debug = %s\n", a1, v5 + 240); | |
printf("[%s]->debug size = %s\n", a1, v5 + 256); | |
break; | |
case 2: | |
v4 = &shmaddr[v6]; | |
printf("[%s]->system_started = %s\n", a1, v4); | |
printf("[%s]->lcd = %s\n", a1, v4 + 16); | |
printf("[%s]->reset_pwd = %s\n", a1, v4 + 32); | |
printf("[%s]->disk standby = %s\n", a1, v4 + 48); | |
printf("[%s]->buzzer = %s\n", a1, v4 + 64); | |
printf("[%s]->buzzerwarn = %s\n", a1, v4 + 80); | |
break; | |
case 3: | |
v3 = &shmaddr[v6]; | |
printf("[%s]->enable = %s\n", a1, v3); | |
printf("[%s]->host = %s\n", a1, v3 + 16); | |
printf("[%s]->base = %s\n", a1, v3 + 80); | |
printf("[%s]->ssl = %s\n", a1, v3 + 336); | |
printf("[%s]->rootbindn = %s\n", a1, v3 + 352); | |
printf("[%s]->nss_base_passwd = %s\n", a1, v3 + 608); | |
printf("[%s]->nss_base_passwd = %s\n", a1, v3 + 608); | |
printf("[%s]->nss_base_shadow = %s\n", a1, v3 + 864); | |
printf("[%s]->nss_base_group = %s\n", a1, v3 + 1120); | |
printf("[%s]->encrypt = %s\n", a1, v3 + 1376); | |
printf("[%s]->server_type = %s\n", a1, v3 + 1392); | |
printf("[%s]->nss_map_uidNumber = %s\n", a1, v3 + 1408); | |
printf("[%s]->hash_uidNumber = %s\n", a1, v3 + 1424); | |
printf("[%s]->nss_map_gidNumber = %s\n", a1, v3 + 1440); | |
printf("[%s]->hash_gidNumber = %s\n", a1, v3 + 1456); | |
break; | |
case 4: | |
printf("[%s]->enable = %s\n", a1, &shmaddr[v6]); | |
printf("[%s]->debug = %s\n", a1, &shmaddr[v6 + 16]); | |
break; | |
case 5: | |
printf("[%s]->enable = %s\n", a1, &shmaddr[v6]); | |
printf("[%s]->home_link = %s\n", a1, &shmaddr[v6 + 16]); | |
break; | |
} | |
} | |
v9 += *((_DWORD *)v10 + 1) + 8; | |
v10 = &shmaddr[v9]; | |
} | |
LABEL_21: | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (000000000000BC39) ---------------------------------------------------- | |
__int64 __fastcall shm_do_misc(const char *a1, char *a2, int a3, char *a4, int a5) | |
{ | |
if ( !strcasecmp(a1, "System Started") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "LCD Panel Setting Control") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 16) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 16); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 16, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Reset Password Switch") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 32) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 32); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 32, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Disk StandBy Timeout") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 48) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 48); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 48, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Buzzer") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 64) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 64); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 64, 0x10uLL, "%s", a2); | |
} | |
} | |
else | |
{ | |
if ( strcasecmp(a1, "Buzzer Warning Enable") ) | |
return 4294967290LL; | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 80) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 80); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 80, 0x10uLL, "%s", a2); | |
} | |
} | |
return 0LL; | |
} | |
//----- (000000000000C11A) ---------------------------------------------------- | |
__int64 __fastcall shm_do_storage(const char *a1, char *a2, int a3, char *a4, int a5) | |
{ | |
if ( !strcasecmp(a1, "Auto Init") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 80) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 80); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 80, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Disk Drive Number") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 96) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 96); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 96, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Drive 1") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Drive 2") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 16) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 16); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 16, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Drive 3") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 32) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 32); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 32, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Drive 4") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 48) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 48); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 48, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Disk Check On Boot") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 64) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 64); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 64, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Auto Fix Disk Check Errors") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 112) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 112); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 112, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Support Raid 5") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 128) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 128); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 128, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Support HOTSWAP") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 144) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 144); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 144, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Drive 1 DMA") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 160) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 160); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 160, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Drive 2 DMA") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 176) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 176); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 176, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Drive 3 DMA") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 192) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 192); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 192, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Drive 4 DMA") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 208) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 208); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 208, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Support HOT Spare") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 224) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 224); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 224, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "NAS DEBUG") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 240) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 240); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 240, 0x10uLL, "%s", a2); | |
} | |
} | |
else | |
{ | |
if ( strcasecmp(a1, "NAS DEBUG DISK SIZE") ) | |
return 4294967290LL; | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 256) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 256); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 256, 0x10uLL, "%s", a2); | |
} | |
} | |
return 0LL; | |
} | |
//----- (000000000000CF05) ---------------------------------------------------- | |
__int64 __fastcall shm_do_system(const char *a1, char *a2, int a3, char *a4, int a5) | |
{ | |
if ( !strcasecmp(a1, "Model") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Server Comment") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 32) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 32); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x80 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 32, 0x80uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Server Name") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 16) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 16); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 16, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Version") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 160) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 160); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x20 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 160, 0x20uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Number") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 192) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 192); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 192, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Build Number") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 208) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 208); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x20 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 208, 0x20uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Time Zone") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 240) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 240); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x40 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 240, 0x40uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Enable Daylight Saving Time") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 304) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 304); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x40 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 304, 0x40uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Workgroup") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 368) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 368); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x20 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 368, 0x20uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Code Page") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 448) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 448); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 448, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "System Device") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 400) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 400); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 400, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Test Mode") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 464) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 464); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 464, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Auto Create Raid") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 480) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 480); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 480, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Wan Access") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 416) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 416); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 416, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Lan Access") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 432) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 432); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 432, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "Web Access Port") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 496) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 496); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 496, 0x10uLL, "%s", a2); | |
} | |
} | |
else | |
{ | |
if ( strcasecmp(a1, "ACL Enable") ) | |
return 4294967290LL; | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 512) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 512); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 512, 0x10uLL, "%s", a2); | |
} | |
} | |
return 0LL; | |
} | |
//----- (000000000000DD1C) ---------------------------------------------------- | |
__int64 __fastcall sub_DD1C(const char *a1, char *a2, int a3, char *a4, int a5) | |
{ | |
if ( !strcasecmp(a1, "Enable") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "host") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 16) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 16); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x40 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 16, 0x40uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "base") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 80) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 80); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x100 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 80, 0x100uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "ssl") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 336) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 336); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 336, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "rootbindn") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 352) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 352); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x100 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 352, 0x100uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "nss_base_passwd") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 608) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 608); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x100 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 608, 0x100uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "nss_base_shadow") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 864) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 864); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x100 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 864, 0x100uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "nss_base_group") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 1120) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 1120); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x100 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 1120, 0x100uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "encrypt") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 1376) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 1376); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 1376, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "LDAP Server Type") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 1392) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 1392); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 1392, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "nss_map_uidNumber") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 1408) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 1408); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 1408, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "hash_uidNumber") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 1424) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 1424); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 1424, 0x10uLL, "%s", a2); | |
} | |
} | |
else if ( !strcasecmp(a1, "nss_map_gidNumber") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 1440) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 1440); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 1440, 0x10uLL, "%s", a2); | |
} | |
} | |
else | |
{ | |
if ( strcasecmp(a1, "hash_gidNumber") ) | |
return 4294967290LL; | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 1456) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 1456); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 1456, 0x10uLL, "%s", a2); | |
} | |
} | |
return 0LL; | |
} | |
//----- (000000000000E8BF) ---------------------------------------------------- | |
__int64 __fastcall sub_E8BF(const char *a1, char *a2, int a3, char *a4, int a5) | |
{ | |
if ( !strcasecmp(a1, "Enable") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4, 0x10uLL, "%s", a2); | |
} | |
} | |
else | |
{ | |
if ( strcasecmp(a1, "debug") ) | |
return 4294967290LL; | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 16) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 16); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 16, 0x10uLL, "%s", a2); | |
} | |
} | |
return 0LL; | |
} | |
//----- (000000000000EA70) ---------------------------------------------------- | |
__int64 __fastcall sub_EA70(const char *a1, char *a2, int a3, char *a4, int a5) | |
{ | |
if ( !strcasecmp(a1, "Enable") ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4, 0x10uLL, "%s", a2); | |
} | |
} | |
else | |
{ | |
if ( strcasecmp(a1, "HomeLink") ) | |
return 4294967290LL; | |
if ( a5 == 1 ) | |
{ | |
if ( a3 < strlen(a4 + 16) + 1 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", a4 + 16); | |
} | |
else if ( a5 == 2 ) | |
{ | |
if ( strlen(a2) + 1 > 0x10 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a4 + 16, 0x10uLL, "%s", a2); | |
} | |
} | |
return 0LL; | |
} | |
//----- (000000000000EC21) ---------------------------------------------------- | |
__int64 __fastcall SHM_Set_Field(const char *a1, const char *a2, char *a3) | |
{ | |
int v5; // [rsp+58h] [rbp-38h] | |
int v6; // [rsp+5Ch] [rbp-34h] | |
char *shmaddr; // [rsp+68h] [rbp-28h] | |
int shmid; // [rsp+74h] [rbp-1Ch] | |
int v9; // [rsp+7Ch] [rbp-14h] | |
char *v10; // [rsp+80h] [rbp-10h] | |
int i; // [rsp+8Ch] [rbp-4h] | |
shmid = shmget(9998, 0x1000uLL, 438); | |
if ( shmid == -1 ) | |
return 0LL; | |
shmaddr = (char *)shmat(shmid, 0LL, 0); | |
if ( shmaddr == (char *)-1LL ) | |
return 0LL; | |
v9 = 4; | |
v10 = shmaddr + 4; | |
v6 = strlen(a3); | |
for ( i = 0; *(_DWORD *)shmaddr > i; ++i ) | |
{ | |
v5 = v9 + 8; | |
if ( !strcasecmp(a1, &MAP[260 * i + 4]) ) | |
{ | |
switch ( i ) | |
{ | |
case 0: | |
shm_do_system(a2, a3, v6, &shmaddr[v5], 2); | |
goto LABEL_21; | |
case 1: | |
shm_do_storage(a2, a3, v6, &shmaddr[v5], 2); | |
goto LABEL_21; | |
case 2: | |
shm_do_misc(a2, a3, v6, &shmaddr[v5], 2); | |
goto LABEL_21; | |
case 3: | |
sub_DD1C(a2, a3, v6, &shmaddr[v5], 2); | |
goto LABEL_21; | |
case 4: | |
sub_E8BF(a2, a3, v6, &shmaddr[v5], 2); | |
goto LABEL_21; | |
case 5: | |
sub_EA70(a2, a3, v6, &shmaddr[v5], 2); | |
goto LABEL_21; | |
} | |
} | |
v9 += *((_DWORD *)v10 + 1) + 8; | |
v10 = &shmaddr[v9]; | |
} | |
LABEL_21: | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (000000000000EF35) ---------------------------------------------------- | |
__int64 __fastcall SHM_Get_Field(const char *a1, const char *a2, char *a3, int a4) | |
{ | |
int v7; // [rsp+5Ch] [rbp-34h] | |
char *shmaddr; // [rsp+68h] [rbp-28h] | |
int shmid; // [rsp+70h] [rbp-20h] | |
int v10; // [rsp+74h] [rbp-1Ch] | |
int v11; // [rsp+78h] [rbp-18h] | |
int v12; // [rsp+7Ch] [rbp-14h] | |
char *v13; // [rsp+80h] [rbp-10h] | |
int i; // [rsp+8Ch] [rbp-4h] | |
v11 = 0; | |
shmid = shmget(9998, 0x1000uLL, 438); | |
if ( shmid == -1 ) | |
return local_conf_get_field("/etc/config/uLinux.conf", a1, a2, a3, a4); | |
shmaddr = (char *)shmat(shmid, 0LL, 0); | |
if ( shmaddr == (char *)-1LL ) | |
return local_conf_get_field("/etc/config/uLinux.conf", a1, a2, a3, a4); | |
v12 = 4; | |
v13 = shmaddr + 4; | |
for ( i = 0; ; ++i ) | |
{ | |
if ( *(_DWORD *)shmaddr <= i ) | |
goto LABEL_26; | |
v7 = v12 + 8; | |
if ( !strcasecmp(a1, &MAP[260 * i + 4]) ) | |
{ | |
switch ( i ) | |
{ | |
case 0: | |
v10 = shm_do_system(a2, a3, a4, &shmaddr[v7], 1); | |
if ( v10 >= 0 ) | |
{ | |
v11 = 1; | |
goto LABEL_26; | |
} | |
goto LABEL_32; | |
case 1: | |
v10 = shm_do_storage(a2, a3, a4, &shmaddr[v7], 1); | |
if ( v10 >= 0 ) | |
{ | |
v11 = 1; | |
goto LABEL_26; | |
} | |
goto LABEL_32; | |
case 2: | |
v10 = shm_do_misc(a2, a3, a4, &shmaddr[v7], 1); | |
if ( v10 >= 0 ) | |
{ | |
v11 = 1; | |
goto LABEL_26; | |
} | |
goto LABEL_32; | |
case 3: | |
v10 = sub_DD1C(a2, a3, a4, &shmaddr[v7], 1); | |
if ( v10 >= 0 ) | |
{ | |
v11 = 1; | |
goto LABEL_26; | |
} | |
goto LABEL_32; | |
case 4: | |
v10 = sub_E8BF(a2, a3, a4, &shmaddr[v7], 1); | |
if ( v10 >= 0 ) | |
{ | |
v11 = 1; | |
goto LABEL_26; | |
} | |
LABEL_32: | |
shmdt(shmaddr); | |
if ( v10 == -6 ) | |
return 4294967290LL; | |
else | |
return 0xFFFFFFFFLL; | |
} | |
if ( i == 5 ) | |
break; | |
} | |
v12 += *((_DWORD *)v13 + 1) + 8; | |
v13 = &shmaddr[v12]; | |
} | |
v10 = sub_EA70(a2, a3, a4, &shmaddr[v7], 1); | |
if ( v10 < 0 ) | |
goto LABEL_32; | |
v11 = 1; | |
LABEL_26: | |
if ( v11 || !(unsigned int)local_conf_get_field("/etc/config/uLinux.conf", a1, a2, a3, a4) ) | |
{ | |
shmdt(shmaddr); | |
if ( *a3 ) | |
return 0LL; | |
else | |
return 4294967290LL; | |
} | |
else | |
{ | |
shmdt(shmaddr); | |
return 4294967290LL; | |
} | |
} | |
//----- (000000000000F322) ---------------------------------------------------- | |
__int64 SHM_Destory() | |
{ | |
int shmid; // [rsp+Ch] [rbp-4h] | |
shmid = shmget(9998, 0x1000uLL, 950); | |
if ( shmctl(shmid, 0, 0LL) != -1 ) | |
return 1LL; | |
puts("SHM destroy fail..."); | |
return 0LL; | |
} | |
// F322: using guessed type __int64 SHM_Destory(); | |
//----- (000000000000F374) ---------------------------------------------------- | |
__int64 SHM_Init() | |
{ | |
const void *shmaddr; // [rsp+50h] [rbp-10h] | |
int shmid; // [rsp+5Ch] [rbp-4h] | |
shmid = shmget(9998, 0x1000uLL, 950); | |
if ( shmid == -1 ) | |
return 0LL; | |
shmaddr = shmat(shmid, 0LL, 0); | |
if ( shmaddr == (const void *)-1LL ) | |
return 0LL; | |
*(_DWORD *)shmaddr = 0; | |
++*(_DWORD *)shmaddr; | |
*((_DWORD *)shmaddr + 1) = 0; | |
*((_DWORD *)shmaddr + 2) = 528; | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Model", (char *)shmaddr + 12, 64); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Server Name", (char *)shmaddr + 28, 64); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Server Comment", (char *)shmaddr + 44, 64); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Version", (char *)shmaddr + 172, 64); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Number", (char *)shmaddr + 204, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Build Number", (char *)shmaddr + 220, 64); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Time Zone", (char *)shmaddr + 252, 64); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Enable Daylight Saving Time", (char *)shmaddr + 316, 64); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Workgroup", (char *)shmaddr + 380, 64); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Code Page", (char *)shmaddr + 460, 64); | |
if ( !*((_BYTE *)shmaddr + 460) ) | |
*((_DWORD *)shmaddr + 115) = 3617588; | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "System Device", (char *)shmaddr + 412, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Test Mode", (char *)shmaddr + 476, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Auto Create Mode", (char *)shmaddr + 492, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Wan Access", (char *)shmaddr + 428, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Lan Access", (char *)shmaddr + 444, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "Web Access Port", (char *)shmaddr + 508, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "System", "ACL Enable", (char *)shmaddr + 524, 16); | |
++*(_DWORD *)shmaddr; | |
*((_DWORD *)shmaddr + 135) = 1; | |
*((_DWORD *)shmaddr + 136) = 272; | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Auto Init", (char *)shmaddr + 628, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Disk Drive Number", (char *)shmaddr + 644, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Drive 1", (char *)shmaddr + 548, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Drive 2", (char *)shmaddr + 564, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Drive 3", (char *)shmaddr + 580, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Drive 4", (char *)shmaddr + 596, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Disk Check On Boot", (char *)shmaddr + 612, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Auto Fix Disk Check Errors", (char *)shmaddr + 660, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Support Raid 5", (char *)shmaddr + 676, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Support HOTSWAP", (char *)shmaddr + 692, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Drive 1 DMA", (char *)shmaddr + 708, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Drive 2 DMA", (char *)shmaddr + 724, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Drive 3 DMA", (char *)shmaddr + 740, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Drive 4 DMA", (char *)shmaddr + 756, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "Support HOT Spare", (char *)shmaddr + 772, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "NAS DEBUG", (char *)shmaddr + 788, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Storage", "NAS DEBUG DISK SIZE", (char *)shmaddr + 804, 16); | |
++*(_DWORD *)shmaddr; | |
*((_DWORD *)shmaddr + 205) = 2; | |
*((_DWORD *)shmaddr + 206) = 96; | |
local_conf_get_field("/etc/config/uLinux.conf", "Misc", "System Started", (char *)shmaddr + 828, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Misc", "LCD Panel Setting Control", (char *)shmaddr + 844, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Misc", "Reset Password Switch", (char *)shmaddr + 860, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Misc", "Disk StandBy Timeout", (char *)shmaddr + 876, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Misc", "Buzzer", (char *)shmaddr + 892, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Misc", "Buzzer Warning Enable", (char *)shmaddr + 908, 16); | |
++*(_DWORD *)shmaddr; | |
*((_DWORD *)shmaddr + 231) = 3; | |
*((_DWORD *)shmaddr + 232) = 1472; | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "Enable", (char *)shmaddr + 932, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "host", (char *)shmaddr + 948, 64); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "base", (char *)shmaddr + 1012, 256); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "ssl", (char *)shmaddr + 1268, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "rootbindn", (char *)shmaddr + 1284, 256); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "nss_base_passwd", (char *)shmaddr + 1540, 256); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "nss_base_shadow", (char *)shmaddr + 1796, 256); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "nss_base_group", (char *)shmaddr + 2052, 256); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "encrypt", (char *)shmaddr + 2308, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "LDAP Server Type", (char *)shmaddr + 2324, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "nss_map_uidNumber", (char *)shmaddr + 2340, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "hash_uidNumber", (char *)shmaddr + 2356, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "nss_map_gidNumber", (char *)shmaddr + 2372, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "LDAP", "hash_gidNumber", (char *)shmaddr + 2388, 16); | |
++*(_DWORD *)shmaddr; | |
*((_DWORD *)shmaddr + 601) = 4; | |
*((_DWORD *)shmaddr + 602) = 32; | |
local_conf_get_field("/etc/config/uLinux.conf", "WebFS", "Enable", (char *)shmaddr + 2412, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "WebFS", "debug", (char *)shmaddr + 2428, 16); | |
if ( !*((_BYTE *)shmaddr + 2428) ) | |
*((_WORD *)shmaddr + 1214) = 48; | |
++*(_DWORD *)shmaddr; | |
*((_DWORD *)shmaddr + 611) = 5; | |
*((_DWORD *)shmaddr + 612) = 32; | |
local_conf_get_field("/etc/config/uLinux.conf", "Samba", "Enable", (char *)shmaddr + 2452, 16); | |
local_conf_get_field("/etc/config/uLinux.conf", "Samba", "HomeLink", (char *)shmaddr + 2468, 16); | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
// F374: using guessed type __int64 SHM_Init(); | |
//----- (000000000001002E) ---------------------------------------------------- | |
__time_t sub_1002E() | |
{ | |
struct timeval tv; // [rsp+0h] [rbp-20h] BYREF | |
gettimeofday(&tv, 0LL); | |
return tv.tv_sec; | |
} | |
//----- (0000000000010055) ---------------------------------------------------- | |
int __fastcall sub_10055(const char *a1, const char *a2, int a3) | |
{ | |
if ( a3 ) | |
return strcasecmp(a1, a2); | |
else | |
return strcmp(a1, a2); | |
} | |
//----- (0000000000010098) ---------------------------------------------------- | |
__int64 __fastcall sub_10098(key_t a1) | |
{ | |
struct sembuf sops; // [rsp+10h] [rbp-10h] BYREF | |
int semid; // [rsp+1Ch] [rbp-4h] | |
semid = semget(a1, 1, 0); | |
if ( semid != -1 ) | |
return (unsigned int)semid; | |
if ( *__errno_location() != 2 ) | |
return 0xFFFFFFFFLL; | |
semid = semget(a1, 1, 1005); | |
if ( semid == -1 ) | |
return 0xFFFFFFFFLL; | |
sops.sem_num = 0; | |
sops.sem_op = 1; | |
sops.sem_flg = 0; | |
if ( semop(semid, &sops, 1uLL) == -1 ) | |
return 0xFFFFFFFFLL; | |
else | |
return (unsigned int)semid; | |
} | |
//----- (0000000000010135) ---------------------------------------------------- | |
__int64 __fastcall sub_10135(int a1) | |
{ | |
int i; // eax | |
struct sembuf sops; // [rsp+10h] [rbp-10h] BYREF | |
sops.sem_num = 0; | |
sops.sem_op = -1; | |
sops.sem_flg = 6144; | |
for ( i = semop(a1, &sops, 1uLL); i == -1; i = semop(a1, &sops, 1uLL) ) | |
{ | |
if ( *__errno_location() != 4 ) | |
return 0xFFFFFFFFLL; | |
} | |
return 0LL; | |
} | |
//----- (0000000000010189) ---------------------------------------------------- | |
__int64 __fastcall sub_10189(int a1) | |
{ | |
struct sembuf sops; // [rsp+10h] [rbp-10h] BYREF | |
sops.sem_num = 0; | |
sops.sem_op = 1; | |
sops.sem_flg = 4096; | |
if ( semop(a1, &sops, 1uLL) == -1 ) | |
return 0xFFFFFFFFLL; | |
else | |
return 0LL; | |
} | |
//----- (00000000000101CF) ---------------------------------------------------- | |
__int64 __fastcall sub_101CF(int a1) | |
{ | |
int i; // eax | |
struct sembuf sops; // [rsp+10h] [rbp-10h] BYREF | |
sops.sem_num = 0; | |
sops.sem_op = -1; | |
sops.sem_flg = 4096; | |
for ( i = semop(a1, &sops, 1uLL); i == -1; i = semop(a1, &sops, 1uLL) ) | |
{ | |
if ( *__errno_location() != 4 ) | |
return 0xFFFFFFFFLL; | |
} | |
return 0LL; | |
} | |
//----- (0000000000010223) ---------------------------------------------------- | |
int __fastcall sub_10223(const char *a1) | |
{ | |
int result; // eax | |
result = open64(a1, 193, 384LL, 438LL); | |
if ( result >= 0 ) | |
return close(result); | |
return result; | |
} | |
//----- (000000000001026B) ---------------------------------------------------- | |
__int64 __fastcall sub_1026B(const char *a1, __int64 a2) | |
{ | |
unsigned int v3; // eax | |
char resolved[512]; // [rsp+10h] [rbp-200h] BYREF | |
memset(resolved, 0, sizeof(resolved)); | |
if ( !realpath(a1, resolved) ) | |
return 0xFFFFFFFFLL; | |
v3 = strlen(resolved); | |
Base64_Encode(a2, resolved, v3); | |
return 0LL; | |
} | |
// A270: using guessed type __int64 __fastcall Base64_Encode(_QWORD, _QWORD, _QWORD); | |
//----- (00000000000102F1) ---------------------------------------------------- | |
key_t __fastcall sub_102F1(const char *a1) | |
{ | |
char dest[12]; // [rsp+10h] [rbp-D0h] BYREF | |
int v3; // [rsp+1Ch] [rbp-C4h] | |
char v4[112]; // [rsp+20h] [rbp-C0h] BYREF | |
char src[80]; // [rsp+90h] [rbp-50h] BYREF | |
memset(src, 0, 65); | |
if ( (int)sub_1026B(a1, (__int64)src) < 0 ) | |
return -1; | |
strcpy(dest, "/var/lock/"); | |
dest[11] = 0; | |
v3 = 0; | |
memset(v4, 0, sizeof(v4)); | |
strcat(dest, src); | |
strcat(dest, ".lck"); | |
sub_10223(dest); | |
return ftok(dest, 0); | |
} | |
//----- (00000000000103EB) ---------------------------------------------------- | |
key_t __fastcall sub_103EB(const char *a1) | |
{ | |
char dest[12]; // [rsp+10h] [rbp-D0h] BYREF | |
int v3; // [rsp+1Ch] [rbp-C4h] | |
char v4[112]; // [rsp+20h] [rbp-C0h] BYREF | |
char src[80]; // [rsp+90h] [rbp-50h] BYREF | |
memset(src, 0, 65); | |
if ( (int)sub_1026B(a1, (__int64)src) < 0 ) | |
return -1; | |
strcpy(dest, "/var/lock/"); | |
dest[11] = 0; | |
v3 = 0; | |
memset(v4, 0, sizeof(v4)); | |
strcat(dest, src); | |
*(_QWORD *)&dest[strlen(dest)] = 0x6B636C2E64695FLL; | |
sub_10223(dest); | |
return ftok(dest, 0); | |
} | |
//----- (00000000000104E8) ---------------------------------------------------- | |
char *sub_104E8() | |
{ | |
char templatea[18]; // [rsp+10h] [rbp-90h] BYREF | |
__int16 v2; // [rsp+22h] [rbp-7Eh] | |
int v3; // [rsp+24h] [rbp-7Ch] | |
char v4[104]; // [rsp+28h] [rbp-78h] BYREF | |
int fd; // [rsp+9Ch] [rbp-4h] | |
strcpy(templatea, "/tmp/conf_XXXXXX"); | |
templatea[17] = 0; | |
v2 = 0; | |
v3 = 0; | |
memset(v4, 0, sizeof(v4)); | |
fd = mkstemp64(templatea); | |
if ( fd == -1 ) | |
return 0LL; | |
close(fd); | |
strcpy(dest, templatea); | |
return dest; | |
} | |
//----- (0000000000010580) ---------------------------------------------------- | |
_DWORD *__fastcall sub_10580(const char *a1) | |
{ | |
char dest[8]; // [rsp+10h] [rbp-E0h] BYREF | |
char v3[120]; // [rsp+18h] [rbp-D8h] BYREF | |
char src[80]; // [rsp+90h] [rbp-60h] BYREF | |
_DWORD *v5; // [rsp+E0h] [rbp-10h] | |
int shmid; // [rsp+E8h] [rbp-8h] | |
key_t key; // [rsp+ECh] [rbp-4h] | |
memset(src, 0, 65); | |
if ( (int)sub_1026B(a1, (__int64)src) < 0 ) | |
return 0LL; | |
*(_QWORD *)dest = 0x2F706D742FLL; | |
memset(v3, 0, sizeof(v3)); | |
strcat(dest, src); | |
strcat(dest, ".stk"); | |
sub_10223(dest); | |
key = ftok(dest, 0); | |
shmid = -1; | |
shmid = shmget(key, 0x58uLL, 950); | |
if ( shmid < 0 ) | |
return 0LL; | |
v5 = 0LL; | |
v5 = shmat(shmid, 0LL, 0); | |
if ( v5 == (_DWORD *)-1LL ) | |
return 0LL; | |
if ( v5[20] != 1 ) | |
{ | |
*(_QWORD *)v5 = 0LL; | |
v5[20] = 1; | |
v5[11] = -1; | |
v5[2] = -1; | |
} | |
return v5; | |
} | |
//----- (0000000000010707) ---------------------------------------------------- | |
__int64 __fastcall sub_10707(const char *a1) | |
{ | |
unsigned int v2; // [rsp+14h] [rbp-Ch] | |
_DWORD *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = sub_10580(a1); | |
if ( !shmaddr ) | |
return 0xFFFFFFFFLL; | |
v2 = shmaddr[11]; | |
shmdt(shmaddr); | |
return v2; | |
} | |
//----- (000000000001074C) ---------------------------------------------------- | |
__int64 __fastcall sub_1074C(const char *a1, int a2) | |
{ | |
_DWORD *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = sub_10580(a1); | |
if ( !shmaddr ) | |
return 0xFFFFFFFFLL; | |
shmaddr[11] = a2; | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (0000000000010796) ---------------------------------------------------- | |
char *__fastcall sub_10796(const char *a1) | |
{ | |
const char *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = (const char *)sub_10580(a1); | |
if ( !shmaddr ) | |
return 0LL; | |
strncpy(byte_2374C0, shmaddr + 48, 0xFuLL); | |
shmdt(shmaddr); | |
return byte_2374C0; | |
} | |
//----- (00000000000107F1) ---------------------------------------------------- | |
__int64 __fastcall sub_107F1(const char *a1, const char *a2) | |
{ | |
char *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = (char *)sub_10580(a1); | |
if ( !shmaddr ) | |
return 0xFFFFFFFFLL; | |
strncpy(shmaddr + 48, a2, 0x1FuLL); | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (000000000001084E) ---------------------------------------------------- | |
__int64 __fastcall sub_1084E(const char *a1) | |
{ | |
unsigned int v2; // [rsp+14h] [rbp-Ch] | |
_DWORD *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = sub_10580(a1); | |
if ( !shmaddr ) | |
return 0xFFFFFFFFLL; | |
v2 = shmaddr[2]; | |
shmdt(shmaddr); | |
return v2; | |
} | |
//----- (0000000000010893) ---------------------------------------------------- | |
__int64 __fastcall sub_10893(const char *a1, int a2) | |
{ | |
_DWORD *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = sub_10580(a1); | |
if ( !shmaddr ) | |
return 0xFFFFFFFFLL; | |
shmaddr[2] = a2; | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (00000000000108DD) ---------------------------------------------------- | |
char *__fastcall sub_108DD(const char *a1) | |
{ | |
const char *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = (const char *)sub_10580(a1); | |
if ( !shmaddr ) | |
return 0LL; | |
strncpy(byte_2374D0, shmaddr + 12, 0xFuLL); | |
shmdt(shmaddr); | |
return byte_2374D0; | |
} | |
//----- (0000000000010938) ---------------------------------------------------- | |
__int64 __fastcall sub_10938(const char *a1, const char *a2) | |
{ | |
char *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = (char *)sub_10580(a1); | |
if ( !shmaddr ) | |
return 0xFFFFFFFFLL; | |
strncpy(shmaddr + 12, a2, 0x1FuLL); | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (0000000000010995) ---------------------------------------------------- | |
__int64 __fastcall sub_10995(const char *a1) | |
{ | |
__int64 v2; // [rsp+10h] [rbp-10h] | |
FILE *stream; // [rsp+18h] [rbp-8h] | |
stream = fopen64(a1, "r"); | |
if ( !stream ) | |
return 0LL; | |
fseek(stream, 0LL, 2); | |
v2 = 2 * ftell(stream); | |
rewind(stream); | |
fclose(stream); | |
return v2; | |
} | |
//----- (0000000000010A0D) ---------------------------------------------------- | |
__int64 __fastcall sub_10A0D(const char *a1) | |
{ | |
unsigned int v2; // [rsp+14h] [rbp-Ch] | |
const char *pathname; // [rsp+18h] [rbp-8h] | |
pathname = sub_104E8(); | |
v2 = ftok(pathname, 0); | |
if ( v2 == -1 ) | |
return 0xFFFFFFFFLL; | |
sub_1074C(a1, v2); | |
sub_107F1(a1, pathname); | |
return v2; | |
} | |
//----- (0000000000010A73) ---------------------------------------------------- | |
__int64 __fastcall sub_10A73(const char *a1) | |
{ | |
return (unsigned int)sub_10707(a1); | |
} | |
//----- (0000000000010A93) ---------------------------------------------------- | |
__int64 __fastcall sub_10A93(const char *a1) | |
{ | |
unsigned int v2; // [rsp+1Ch] [rbp-4h] | |
v2 = sub_1084E(a1); | |
if ( v2 == -1 ) | |
return 0xFFFFFFFFLL; | |
else | |
return v2; | |
} | |
//----- (0000000000010AC0) ---------------------------------------------------- | |
__int64 __fastcall sub_10AC0(key_t a1) | |
{ | |
int v2; // [rsp+1Ch] [rbp-4h] | |
v2 = shmget(a1, 0LL, 950); | |
if ( v2 >= 0 ) | |
return (unsigned int)v2; | |
else | |
return 0xFFFFFFFFLL; | |
} | |
//----- (0000000000010AFB) ---------------------------------------------------- | |
__int64 __fastcall sub_10AFB(const char *a1, int a2) | |
{ | |
int v3; // eax | |
key_t *shmaddr; // [rsp+18h] [rbp-18h] | |
char *name; // [rsp+20h] [rbp-10h] | |
shmaddr = sub_10580(a1); | |
if ( !shmaddr ) | |
return 0xFFFFFFFFLL; | |
if ( a2 ) | |
{ | |
name = (char *)(shmaddr + 12); | |
v3 = sub_10AC0(shmaddr[11]); | |
} | |
else | |
{ | |
name = (char *)(shmaddr + 3); | |
v3 = sub_10AC0(shmaddr[2]); | |
} | |
shmctl(v3, 0, 0LL); | |
unlink(name); | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (0000000000010BAE) ---------------------------------------------------- | |
__time_t __fastcall sub_10BAE(char *a1) | |
{ | |
struct stat64 stat_buf; // [rsp+10h] [rbp-90h] BYREF | |
if ( sub_2D9E0(a1, &stat_buf) == -1 ) | |
return 0LL; | |
else | |
return stat_buf.st_mtim.tv_sec; | |
} | |
//----- (0000000000010BEB) ---------------------------------------------------- | |
__int64 __fastcall sub_10BEB(const char *a1) | |
{ | |
__int64 v2; // [rsp+10h] [rbp-10h] | |
_DWORD *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = sub_10580(a1); | |
if ( !shmaddr ) | |
return -1LL; | |
v2 = *(_QWORD *)shmaddr; | |
shmdt(shmaddr); | |
return v2; | |
} | |
//----- (0000000000010C34) ---------------------------------------------------- | |
__int64 __fastcall sub_10C34(const char *a1, __int64 a2) | |
{ | |
_DWORD *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = sub_10580(a1); | |
if ( !shmaddr ) | |
return -1LL; | |
*(_QWORD *)shmaddr = a2; | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (0000000000010C82) ---------------------------------------------------- | |
__int64 __fastcall sub_10C82(const char *a1, int a2) | |
{ | |
__int64 size; // [rsp+10h] [rbp-10h] | |
int v4; // [rsp+18h] [rbp-8h] | |
int v5; // [rsp+18h] [rbp-8h] | |
key_t key; // [rsp+1Ch] [rbp-4h] | |
if ( a2 ) | |
key = sub_10A73(a1); | |
else | |
key = sub_10A93(a1); | |
if ( key == -1 ) | |
return 0xFFFFFFFFLL; | |
v4 = shmget(key, 0LL, 950); | |
if ( v4 >= 0 ) | |
return (unsigned int)v4; | |
size = sub_10995(a1); | |
v5 = shmget(key, size, 950); | |
if ( v5 >= 0 ) | |
return (unsigned int)v5; | |
else | |
return 0xFFFFFFFFLL; | |
} | |
//----- (0000000000010D2F) ---------------------------------------------------- | |
void *__fastcall sub_10D2F(const char *a1, int a2) | |
{ | |
void *v3; // [rsp+10h] [rbp-10h] | |
int shmid; // [rsp+1Ch] [rbp-4h] | |
shmid = sub_10C82(a1, a2); | |
if ( shmid == -1 ) | |
return 0LL; | |
v3 = shmat(shmid, 0LL, 0); | |
if ( v3 == (void *)-1LL ) | |
return 0LL; | |
else | |
return v3; | |
} | |
//----- (0000000000010D93) ---------------------------------------------------- | |
int __fastcall sub_10D93(const char *a1, int a2) | |
{ | |
_DWORD *v2; // rax | |
v2 = sub_10D2F(a1, 1); | |
if ( v2 ) | |
{ | |
v2[6] = a2; | |
LODWORD(v2) = shmdt(v2); | |
} | |
return (int)v2; | |
} | |
//----- (0000000000010DD8) ---------------------------------------------------- | |
__int64 __fastcall sub_10DD8(const char *a1) | |
{ | |
unsigned int v2; // [rsp+14h] [rbp-Ch] | |
_DWORD *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = sub_10D2F(a1, 1); | |
if ( !shmaddr ) | |
return 0xFFFFFFFFLL; | |
v2 = shmaddr[6]; | |
shmdt(shmaddr); | |
return v2; | |
} | |
//----- (0000000000010E22) ---------------------------------------------------- | |
_BYTE *__fastcall sub_10E22(_BYTE *a1) | |
{ | |
while ( *a1 == 32 || *a1 == 9 ) | |
++a1; | |
return a1; | |
} | |
//----- (0000000000010E4D) ---------------------------------------------------- | |
const char *__fastcall sub_10E4D(const char *a1) | |
{ | |
int v1; // eax | |
const char *v3; // [rsp+18h] [rbp-8h] | |
v1 = strlen(a1); | |
v3 = &a1[v1 - 1]; | |
if ( v1 > 0 ) | |
{ | |
while ( *v3 == 32 || *v3 == 9 || *v3 == 10 ) | |
--v3; | |
} | |
return v3 + 1; | |
} | |
//----- (0000000000010EB4) ---------------------------------------------------- | |
__int64 __fastcall sub_10EB4(_BYTE *a1, char *a2) | |
{ | |
char *i; // rax | |
char *src; // [rsp+18h] [rbp-18h] | |
char *srca; // [rsp+18h] [rbp-18h] | |
char *v6; // [rsp+28h] [rbp-8h] | |
v6 = 0LL; | |
src = sub_10E22(a1); | |
if ( *src != 91 ) | |
return 0xFFFFFFFFLL; | |
if ( !src ) | |
return 0xFFFFFFFFLL; | |
srca = src + 1; | |
for ( i = strchr(srca, 93); i; i = strchr(i + 1, 93) ) | |
v6 = i; | |
if ( !v6 ) | |
return 0xFFFFFFFFLL; | |
strncpy(a2, srca, v6 - srca); | |
a2[v6 - srca] = 0; | |
return 0LL; | |
} | |
//----- (0000000000010F8E) ---------------------------------------------------- | |
__int64 __fastcall sub_10F8E(char *a1, char *a2, char *a3) | |
{ | |
const char *v4; // rax | |
char *v6; // [rsp+30h] [rbp-10h] | |
char *v7; // [rsp+30h] [rbp-10h] | |
char *s; // [rsp+38h] [rbp-8h] | |
char *sa; // [rsp+38h] [rbp-8h] | |
v6 = strchr(a1, 61); | |
if ( !v6 ) | |
return 0xFFFFFFFFLL; | |
v4 = sub_10E22(a1); | |
strncpy(a2, v4, v6 - v4); | |
*sub_10E4D(a2) = 0; | |
s = v6 + 1; | |
v7 = strchr(v6 + 1, 10); | |
if ( !v7 ) | |
return 0xFFFFFFFFLL; | |
sa = sub_10E22(s); | |
strncpy(a3, sa, v7 - sa); | |
*sub_10E4D(a3) = 0; | |
if ( *a2 ) | |
return 0LL; | |
else | |
return 0xFFFFFFFFLL; | |
} | |
//----- (00000000000110E6) ---------------------------------------------------- | |
__int64 __fastcall sub_110E6(const char *a1) | |
{ | |
_DWORD *shmaddr; // [rsp+18h] [rbp-8h] | |
shmaddr = sub_10D2F(a1, 1); | |
if ( !shmaddr ) | |
return 0xFFFFFFFFLL; | |
shmaddr[4] = 1; | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (0000000000011133) ---------------------------------------------------- | |
__int64 __fastcall sub_11133(const char *a1) | |
{ | |
__int64 src[3]; // [rsp+10h] [rbp-30h] BYREF | |
int v3; // [rsp+28h] [rbp-18h] | |
size_t n; // [rsp+30h] [rbp-10h] | |
void *s; // [rsp+38h] [rbp-8h] | |
s = sub_10D2F(a1, 1); | |
if ( !s ) | |
return 0xFFFFFFFFLL; | |
n = sub_10995(a1); | |
memset(s, 0, n); | |
src[0] = 0x1C0000001CLL; | |
src[1] = 0x1C0000001CLL; | |
src[2] = 0LL; | |
v3 = 0; | |
memcpy(s, src, 0x1CuLL); | |
shmdt(s); | |
return 0LL; | |
} | |
//----- (0000000000011205) ---------------------------------------------------- | |
__int64 __fastcall sub_11205(__int64 a1, __int64 a2) | |
{ | |
if ( a2 ) | |
return a2 - a1; | |
else | |
return 0xFFFFFFFFLL; | |
} | |
//----- (000000000001122F) ---------------------------------------------------- | |
__int64 __fastcall sub_1122F(__int64 a1) | |
{ | |
if ( a1 ) | |
return *(int *)(a1 + 8) + a1; | |
else | |
return 0LL; | |
} | |
//----- (0000000000011258) ---------------------------------------------------- | |
__int64 __fastcall sub_11258(__int64 a1, int a2) | |
{ | |
if ( a2 == -1 ) | |
return 0LL; | |
else | |
return a2 + a1; | |
} | |
//----- (000000000001127F) ---------------------------------------------------- | |
char *__fastcall sub_1127F(int *a1) | |
{ | |
return (char *)a1 + *a1; | |
} | |
//----- (0000000000011299) ---------------------------------------------------- | |
_DWORD *__fastcall sub_11299(_DWORD *a1, int a2) | |
{ | |
_DWORD *result; // rax | |
result = a1; | |
*a1 = a2 - (_DWORD)a1; | |
return result; | |
} | |
//----- (00000000000112BD) ---------------------------------------------------- | |
__int64 __fastcall sub_112BD(__int64 a1) | |
{ | |
return *(int *)(a1 + 12) + a1; | |
} | |
//----- (00000000000112D8) ---------------------------------------------------- | |
__int64 __fastcall sub_112D8(__int64 a1, int a2) | |
{ | |
__int64 result; // rax | |
result = a1; | |
*(_DWORD *)(a1 + 8) = a2 - a1; | |
return result; | |
} | |
//----- (00000000000112FD) ---------------------------------------------------- | |
__int64 __fastcall sub_112FD(__int64 a1, int a2) | |
{ | |
__int64 result; // rax | |
result = a1; | |
*(_DWORD *)(a1 + 12) = a2 - a1; | |
return result; | |
} | |
//----- (0000000000011322) ---------------------------------------------------- | |
__int64 __fastcall sub_11322(const char *a1, const char *a2, int a3, char a4) | |
{ | |
const char *v6; // [rsp+28h] [rbp-28h] | |
__int64 v7; // [rsp+30h] [rbp-20h] | |
_DWORD *shmaddr; // [rsp+38h] [rbp-18h] | |
unsigned int v9; // [rsp+44h] [rbp-Ch] | |
int *v10; // [rsp+48h] [rbp-8h] | |
shmaddr = sub_10D2F(a1, a3); | |
if ( !shmaddr || !shmaddr[2] ) | |
return 0xFFFFFFFFLL; | |
v7 = sub_1122F((__int64)shmaddr); | |
if ( v7 ) | |
{ | |
v10 = (int *)v7; | |
v9 = shmaddr[2]; | |
while ( v10 ) | |
{ | |
v6 = (const char *)sub_11258((__int64)shmaddr, *v10); | |
if ( !sub_10055(v6, a2, a4 & 2) ) | |
{ | |
shmdt(shmaddr); | |
return v9; | |
} | |
v9 = v10[1]; | |
v10 = (int *)sub_11258((__int64)shmaddr, v9); | |
} | |
} | |
shmdt(shmaddr); | |
return 0xFFFFFFFFLL; | |
} | |
//----- (000000000001142F) ---------------------------------------------------- | |
char *__fastcall sub_1142F(int *a1, const char *a2) | |
{ | |
int v2; // eax | |
char *dest; // [rsp+18h] [rbp-8h] | |
dest = sub_1127F(a1); | |
strcpy(dest, a2); | |
dest[strlen(a2)] = 0; | |
v2 = strlen(dest); | |
sub_11299(a1, (_DWORD)dest + v2 + 1); | |
return dest; | |
} | |
//----- (00000000000114A7) ---------------------------------------------------- | |
__int64 __fastcall sub_114A7(const char *a1, const char *a2) | |
{ | |
__int64 v3; // [rsp+18h] [rbp-28h] | |
char *v4; // [rsp+20h] [rbp-20h] | |
int v5; // [rsp+2Ch] [rbp-14h] | |
char *v6; // [rsp+30h] [rbp-10h] | |
int *shmaddr; // [rsp+38h] [rbp-8h] | |
shmaddr = (int *)sub_10D2F(a1, 1); | |
if ( !shmaddr || !shmaddr[2] ) | |
return 0xFFFFFFFFLL; | |
v6 = sub_1142F(shmaddr, a2); | |
v5 = sub_11205((__int64)shmaddr, (__int64)v6); | |
v4 = sub_1127F(shmaddr); | |
*(_DWORD *)v4 = v5; | |
*((_DWORD *)v4 + 1) = sub_11205((__int64)shmaddr, 0LL); | |
*((_DWORD *)v4 + 2) = sub_11205((__int64)shmaddr, 0LL); | |
*((_DWORD *)v4 + 3) = sub_11205((__int64)shmaddr, 0LL); | |
if ( shmaddr[5] ) | |
{ | |
v3 = sub_112BD((__int64)shmaddr); | |
*(_DWORD *)(v3 + 4) = sub_11205((__int64)shmaddr, (__int64)v4); | |
} | |
else | |
{ | |
sub_112D8((__int64)shmaddr, (int)v4); | |
} | |
sub_112FD((__int64)shmaddr, (int)v4); | |
sub_11299(shmaddr, (_DWORD)v4 + 16); | |
++shmaddr[5]; | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (0000000000011616) ---------------------------------------------------- | |
__int64 __fastcall sub_11616(const char *a1, __int64 a2, const char *a3, const char *a4) | |
{ | |
char *v7; // [rsp+20h] [rbp-40h] | |
int v8; // [rsp+2Ch] [rbp-34h] | |
char *v9; // [rsp+30h] [rbp-30h] | |
int v10; // [rsp+3Ch] [rbp-24h] | |
char *v11; // [rsp+40h] [rbp-20h] | |
int *shmaddr; // [rsp+48h] [rbp-18h] | |
__int64 v13; // [rsp+50h] [rbp-10h] | |
__int64 v14; // [rsp+58h] [rbp-8h] | |
shmaddr = (int *)sub_10D2F(a1, 1); | |
if ( !shmaddr || !shmaddr[2] ) | |
return 0xFFFFFFFFLL; | |
v11 = sub_1142F(shmaddr, a3); | |
v10 = sub_11205((__int64)shmaddr, (__int64)v11); | |
v9 = sub_1142F(shmaddr, a4); | |
v8 = sub_11205((__int64)shmaddr, (__int64)v9); | |
v7 = sub_1127F(shmaddr); | |
*(_DWORD *)v7 = v10; | |
*((_DWORD *)v7 + 1) = v8; | |
*((_DWORD *)v7 + 2) = sub_11205((__int64)shmaddr, 0LL); | |
if ( *(_DWORD *)(a2 + 8) == -1 ) | |
{ | |
*(_DWORD *)(a2 + 8) = sub_11205((__int64)shmaddr, (__int64)v7); | |
*(_DWORD *)(a2 + 12) = sub_11205((__int64)shmaddr, (__int64)v7); | |
} | |
else | |
{ | |
v14 = sub_11258((__int64)shmaddr, *(_DWORD *)(a2 + 8)); | |
if ( v14 ) | |
{ | |
v13 = 0LL; | |
while ( v14 ) | |
{ | |
v13 = v14; | |
v14 = sub_11258((__int64)shmaddr, *(_DWORD *)(v14 + 8)); | |
} | |
*(_DWORD *)(v13 + 8) = sub_11205((__int64)shmaddr, (__int64)v7); | |
} | |
} | |
sub_11299(shmaddr, (_DWORD)v7 + 12); | |
shmdt(shmaddr); | |
return 0LL; | |
} | |
//----- (00000000000117D4) ---------------------------------------------------- | |
__int64 __fastcall sub_117D4(const char *a1) | |
{ | |
key_t v1; // eax | |
key_t v2; // eax | |
int v4; // [rsp+18h] [rbp-18h] | |
int v5; // [rsp+1Ch] [rbp-14h] | |
char *v6; // [rsp+20h] [rbp-10h] | |
int v7; // [rsp+2Ch] [rbp-4h] | |
v7 = sub_10707(a1); | |
v6 = sub_10796(a1); | |
v1 = sub_103EB(a1); | |
v5 = sub_10098(v1); | |
sub_101CF(v5); | |
sub_10AFB(a1, 0); | |
sub_10893(a1, v7); | |
sub_10938(a1, v6); | |
v2 = sub_103EB(a1); | |
v4 = sub_10098(v2); | |
sub_10189(v4); | |
return 0LL; | |
} | |
//----- (000000000001187B) ---------------------------------------------------- | |
__int64 __fastcall sub_1187B(char *a1, const char *a2, char a3) | |
{ | |
key_t v4; // eax | |
key_t v5; // eax | |
__int64 v6; // rax | |
key_t v7; // eax | |
char v9[128]; // [rsp+20h] [rbp-1960h] BYREF | |
char v10[2048]; // [rsp+A0h] [rbp-18E0h] BYREF | |
char v11[128]; // [rsp+8A0h] [rbp-10E0h] BYREF | |
char s[4104]; // [rsp+920h] [rbp-1060h] BYREF | |
int v13; // [rsp+1928h] [rbp-58h] | |
int v14; // [rsp+192Ch] [rbp-54h] | |
FILE *stream; // [rsp+1930h] [rbp-50h] | |
int v16[4]; // [rsp+193Ch] [rbp-44h] | |
int v17; // [rsp+194Ch] [rbp-34h] | |
int v18; // [rsp+1950h] [rbp-30h] | |
int v19; // [rsp+1954h] [rbp-2Ch] | |
__time_t v20; // [rsp+1958h] [rbp-28h] | |
__int64 v21; // [rsp+1960h] [rbp-20h] | |
__time_t v22; // [rsp+1968h] [rbp-18h] | |
__int64 v23; // [rsp+1970h] [rbp-10h] | |
int v24; // [rsp+1978h] [rbp-8h] | |
_BOOL4 v25; // [rsp+197Ch] [rbp-4h] | |
v22 = sub_10BAE(a1); | |
v21 = sub_10BEB(a1); | |
v25 = 0; | |
v20 = sub_1002E(); | |
if ( !v22 || !v21 || v22 != v21 ) | |
v25 = 1; | |
if ( !v25 ) | |
v25 = (int)sub_10DD8(a1) > 0; | |
if ( !v25 ) | |
return 0LL; | |
v4 = sub_102F1(a1); | |
v18 = sub_10098(v4); | |
v19 = sub_10135(v18); | |
if ( v19 == -1 ) | |
return 0LL; | |
v17 = sub_10A0D(a1); | |
if ( v17 == -1 ) | |
return 0xFFFFFFFFLL; | |
*(_QWORD *)&v16[1] = sub_10D2F(a1, 1); | |
if ( *(_QWORD *)&v16[1] ) | |
{ | |
if ( (unsigned int)sub_11133(a1) == -1 ) | |
{ | |
sub_10AFB(a1, 1); | |
return 0xFFFFFFFFLL; | |
} | |
else | |
{ | |
stream = fopen64(a2, "r"); | |
if ( stream ) | |
{ | |
memset(s, 0, 0x1000uLL); | |
memset(v11, 0, sizeof(v11)); | |
v24 = 0; | |
v14 = -1; | |
v23 = 0LL; | |
v6 = sub_10BAE(a1); | |
sub_10C34(a1, v6); | |
while ( fgets(s, 4096, stream) ) | |
{ | |
memset(v9, 0, sizeof(v9)); | |
memset(v10, 0, sizeof(v10)); | |
if ( (unsigned int)sub_10EB4(s, v11) == -1 ) | |
{ | |
if ( !v24 ) | |
{ | |
sub_114A7(a1, byte_2E29E); | |
v14 = sub_11322(a1, v11, 1, a3); | |
v23 = sub_11258(*(__int64 *)&v16[1], v14); | |
} | |
if ( (unsigned int)sub_10F8E(s, v9, v10) != -1 && v23 ) | |
sub_11616(a1, v23, v9, v10); | |
} | |
else | |
{ | |
v24 = 1; | |
sub_114A7(a1, v11); | |
v14 = sub_11322(a1, v11, 1, a3); | |
v23 = sub_11258(*(__int64 *)&v16[1], v14); | |
} | |
} | |
if ( stream ) | |
fclose(stream); | |
shmdt(*(const void **)&v16[1]); | |
sub_110E6(a1); | |
sub_117D4(a1); | |
v7 = sub_102F1(a1); | |
v13 = sub_10098(v7); | |
sub_10189(v13); | |
return 0LL; | |
} | |
else | |
{ | |
return 0xFFFFFFFFLL; | |
} | |
} | |
} | |
else | |
{ | |
sub_10AFB(a1, 1); | |
v5 = sub_102F1(a1); | |
*(_QWORD *)v16 = (unsigned int)sub_10098(v5); | |
sub_10189(v16[0]); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
// 1187B: using guessed type int var_44[4]; | |
//----- (0000000000011C8E) ---------------------------------------------------- | |
__int64 __fastcall Conf_Get_Sections_V2(char *a1, _QWORD *a2, char a3) | |
{ | |
key_t v4; // eax | |
key_t v5; // eax | |
const char *v6; // rax | |
key_t v7; // eax | |
int v8; // [rsp+20h] [rbp-30h] | |
int v9; // [rsp+24h] [rbp-2Ch] | |
void *v10; // [rsp+28h] [rbp-28h] | |
int *shmaddr; // [rsp+30h] [rbp-20h] | |
int v12; // [rsp+38h] [rbp-18h] | |
unsigned int v13; // [rsp+3Ch] [rbp-14h] | |
int *v14; // [rsp+40h] [rbp-10h] | |
void *ptr; // [rsp+48h] [rbp-8h] | |
if ( (unsigned int)sub_1187B(a1, a1, a3) == -1 ) | |
return 0xFFFFFFFFLL; | |
v4 = sub_103EB(a1); | |
v12 = sub_10098(v4); | |
sub_101CF(v12); | |
shmaddr = (int *)sub_10D2F(a1, 0); | |
if ( shmaddr && shmaddr[2] ) | |
{ | |
ptr = 0LL; | |
v14 = (int *)sub_11258((__int64)shmaddr, shmaddr[2]); | |
v13 = 0; | |
while ( v14 ) | |
{ | |
if ( ptr ) | |
{ | |
v10 = realloc(ptr, (int)((v13 + 1) << 7)); | |
if ( !v10 ) | |
{ | |
free(ptr); | |
ptr = 0LL; | |
break; | |
} | |
ptr = v10; | |
} | |
else | |
{ | |
ptr = calloc(1uLL, 0x80uLL); | |
} | |
v6 = (const char *)sub_11258((__int64)shmaddr, *v14); | |
strncpy((char *)ptr + 128 * (__int64)(int)v13++, v6, 0x7FuLL); | |
v14 = (int *)sub_11258((__int64)shmaddr, v14[1]); | |
} | |
shmdt(shmaddr); | |
v7 = sub_103EB(a1); | |
v9 = sub_10098(v7); | |
sub_10189(v9); | |
*a2 = ptr; | |
return v13; | |
} | |
else | |
{ | |
v5 = sub_103EB(a1); | |
v8 = sub_10098(v5); | |
sub_10189(v8); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
// 11DB3: conditional instruction was optimized away because %ptr.8!=0 | |
//----- (0000000000011E73) ---------------------------------------------------- | |
__int64 __fastcall Conf_Get_Fields_V2(char *a1, const char *a2, _QWORD *a3, char a4) | |
{ | |
key_t v5; // eax | |
key_t v6; // eax | |
key_t v7; // eax | |
key_t v8; // eax | |
int v11; // [rsp+20h] [rbp-50h] | |
int v12; // [rsp+24h] [rbp-4Ch] | |
void *v13; // [rsp+28h] [rbp-48h] | |
char *src; // [rsp+30h] [rbp-40h] | |
__int64 v15; // [rsp+38h] [rbp-38h] | |
_DWORD *shmaddr; // [rsp+40h] [rbp-30h] | |
int v17; // [rsp+4Ch] [rbp-24h] | |
int v18; // [rsp+50h] [rbp-20h] | |
int v19; // [rsp+54h] [rbp-1Ch] | |
int *v20; // [rsp+58h] [rbp-18h] | |
unsigned int v21; // [rsp+64h] [rbp-Ch] | |
void *ptr; // [rsp+68h] [rbp-8h] | |
if ( (unsigned int)sub_1187B(a1, a1, a4) == -1 ) | |
return 0xFFFFFFFFLL; | |
v5 = sub_103EB(a1); | |
v19 = sub_10098(v5); | |
sub_101CF(v19); | |
v18 = sub_11322(a1, a2, 0, a4); | |
if ( v18 == -1 ) | |
{ | |
v6 = sub_103EB(a1); | |
v17 = sub_10098(v6); | |
sub_10189(v17); | |
return 0xFFFFFFFFLL; | |
} | |
else | |
{ | |
shmaddr = sub_10D2F(a1, 0); | |
if ( shmaddr && shmaddr[2] ) | |
{ | |
ptr = 0LL; | |
v15 = sub_11258((__int64)shmaddr, v18); | |
if ( v15 ) | |
{ | |
v21 = 0; | |
v20 = (int *)sub_11258((__int64)shmaddr, *(_DWORD *)(v15 + 8)); | |
while ( v20 ) | |
{ | |
src = (char *)sub_11258((__int64)shmaddr, *v20); | |
if ( ptr ) | |
{ | |
v13 = realloc(ptr, (int)((v21 + 1) << 7)); | |
if ( !v13 ) | |
{ | |
free(ptr); | |
ptr = 0LL; | |
break; | |
} | |
ptr = v13; | |
} | |
else | |
{ | |
ptr = calloc(1uLL, 0x80uLL); | |
} | |
strncpy((char *)ptr + 128 * (__int64)(int)v21, src, 0x7FuLL); | |
v20 = (int *)sub_11258((__int64)shmaddr, v20[2]); | |
++v21; | |
} | |
shmdt(shmaddr); | |
v8 = sub_103EB(a1); | |
v12 = sub_10098(v8); | |
sub_10189(v12); | |
*a3 = ptr; | |
return v21; | |
} | |
else | |
{ | |
return 0xFFFFFFFFLL; | |
} | |
} | |
else | |
{ | |
v7 = sub_103EB(a1); | |
v11 = sub_10098(v7); | |
sub_10189(v11); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
} | |
// 12027: conditional instruction was optimized away because %ptr.8!=0 | |
//----- (00000000000120D5) ---------------------------------------------------- | |
__int64 __fastcall Conf_Get_Value_V2(char *a1, const char *a2, const char *a3, char *a4, int a5, char a6) | |
{ | |
key_t v7; // eax | |
key_t v8; // eax | |
key_t v9; // eax | |
key_t v10; // eax | |
key_t v11; // eax | |
key_t v12; // eax | |
key_t v13; // eax | |
int v18; // [rsp+30h] [rbp-50h] | |
int v19; // [rsp+34h] [rbp-4Ch] | |
int v20; // [rsp+38h] [rbp-48h] | |
int v21; // [rsp+3Ch] [rbp-44h] | |
int v22; // [rsp+40h] [rbp-40h] | |
int v23; // [rsp+44h] [rbp-3Ch] | |
char *s; // [rsp+48h] [rbp-38h] | |
const char *v25; // [rsp+50h] [rbp-30h] | |
__int64 v26; // [rsp+58h] [rbp-28h] | |
_DWORD *shmaddr; // [rsp+60h] [rbp-20h] | |
int v28; // [rsp+6Ch] [rbp-14h] | |
int v29; // [rsp+70h] [rbp-10h] | |
int v30; // [rsp+74h] [rbp-Ch] | |
int *i; // [rsp+78h] [rbp-8h] | |
if ( (unsigned int)sub_1187B(a1, a1, a6) == -1 ) | |
return 4294967290LL; | |
v7 = sub_103EB(a1); | |
v30 = sub_10098(v7); | |
sub_101CF(v30); | |
v29 = sub_11322(a1, a2, 0, a6); | |
if ( v29 == -1 ) | |
{ | |
v8 = sub_103EB(a1); | |
v28 = sub_10098(v8); | |
sub_10189(v28); | |
return 4294967290LL; | |
} | |
else | |
{ | |
shmaddr = sub_10D2F(a1, 0); | |
if ( shmaddr && shmaddr[2] ) | |
{ | |
v26 = sub_11258((__int64)shmaddr, v29); | |
if ( v26 ) | |
{ | |
for ( i = (int *)sub_11258((__int64)shmaddr, *(_DWORD *)(v26 + 8)); ; i = (int *)sub_11258( | |
(__int64)shmaddr, | |
i[2]) ) | |
{ | |
if ( !i ) | |
{ | |
shmdt(shmaddr); | |
v13 = sub_103EB(a1); | |
v19 = sub_10098(v13); | |
sub_10189(v19); | |
return 4294967290LL; | |
} | |
v25 = (const char *)sub_11258((__int64)shmaddr, *i); | |
if ( !sub_10055(v25, a3, a6 & 2) ) | |
break; | |
} | |
s = (char *)sub_11258((__int64)shmaddr, i[1]); | |
v23 = strlen(s); | |
if ( a4 ) | |
{ | |
if ( v23 + 1 <= a5 ) | |
{ | |
strncpy(a4, s, a5); | |
shmdt(shmaddr); | |
v12 = sub_103EB(a1); | |
v20 = sub_10098(v12); | |
sub_10189(v20); | |
return 0LL; | |
} | |
else | |
{ | |
shmdt(shmaddr); | |
v11 = sub_103EB(a1); | |
v21 = sub_10098(v11); | |
sub_10189(v21); | |
return 4294967287LL; | |
} | |
} | |
else | |
{ | |
shmdt(shmaddr); | |
v10 = sub_103EB(a1); | |
v22 = sub_10098(v10); | |
sub_10189(v22); | |
return (unsigned int)(v23 + 1); | |
} | |
} | |
else | |
{ | |
return 4294967290LL; | |
} | |
} | |
else | |
{ | |
v9 = sub_103EB(a1); | |
v18 = sub_10098(v9); | |
sub_10189(v18); | |
return 4294967290LL; | |
} | |
} | |
} | |
//----- (00000000000123A1) ---------------------------------------------------- | |
__int64 __fastcall Conf_Add_Set_Count(const char *a1) | |
{ | |
int v2; // [rsp+1Ch] [rbp-4h] | |
v2 = sub_10DD8(a1) + 1; | |
sub_10D93(a1, v2); | |
return 0LL; | |
} | |
//----- (00000000000123D8) ---------------------------------------------------- | |
_BOOL8 is_ram_almost_full() | |
{ | |
struct statfs64 buf; // [rsp+0h] [rbp-90h] BYREF | |
int v2; // [rsp+7Ch] [rbp-14h] | |
__fsblkcnt64_t v3; // [rsp+80h] [rbp-10h] | |
__fsblkcnt64_t v4; // [rsp+88h] [rbp-8h] | |
v4 = 100LL; | |
v3 = 100LL; | |
v2 = statfs64("/", &buf); | |
if ( !v2 && buf.f_type != 2240043254LL ) | |
v4 = (buf.f_bsize * buf.f_bavail) >> 10; | |
v2 = statfs64("/tmp", &buf); | |
if ( !v2 && buf.f_type != 2240043254LL ) | |
v3 = (buf.f_bsize * buf.f_bavail) >> 10; | |
return v4 <= 8 || v3 <= 8; | |
} | |
//----- (00000000000124B2) ---------------------------------------------------- | |
const char *__fastcall Skip_White_Space_Ex(const char *a1) | |
{ | |
int i; // [rsp+2Ch] [rbp-4h] | |
while ( *a1 == 32 || *a1 == 9 ) | |
++a1; | |
for ( i = strlen(a1) - 1; i >= 0; --i ) | |
{ | |
if ( a1[i] == 32 || a1[i] == 9 ) | |
a1[i] = 0; | |
} | |
return a1; | |
} | |
//----- (0000000000012545) ---------------------------------------------------- | |
const char *__fastcall Skip_White_Space_HT(const char *a1) | |
{ | |
const char *i; // [rsp+10h] [rbp-10h] | |
while ( *a1 == 32 || *a1 == 9 ) | |
++a1; | |
if ( *a1 ) | |
{ | |
for ( i = &a1[strlen(a1) - 1]; *i == 32 || *i == 9; --i ) | |
; | |
*((_BYTE *)i + 1) = 0; | |
} | |
return a1; | |
} | |
//----- (00000000000125CA) ---------------------------------------------------- | |
__int64 __fastcall find_char_in_string(__int64 a1, char a2) | |
{ | |
unsigned int i; // [rsp+18h] [rbp-4h] | |
for ( i = 0; ; ++i ) | |
{ | |
while ( 1 ) | |
{ | |
if ( !*(_BYTE *)((int)i + a1) ) | |
return 0xFFFFFFFFLL; | |
if ( a2 == 32 || a2 == 9 ) | |
break; | |
if ( *(_BYTE *)((int)i + a1) == a2 ) | |
return i; | |
++i; | |
} | |
if ( *(_BYTE *)((int)i + a1) == 32 || *(_BYTE *)((int)i + a1) == 9 ) | |
break; | |
} | |
if ( *(_BYTE *)((int)i + 1LL + a1) == 32 || *(_BYTE *)((int)i + 1LL + a1) == 9 ) | |
{ | |
while ( *(_BYTE *)((int)i + 1LL + a1) == 32 || *(_BYTE *)((int)i + 1LL + a1) == 9 ) | |
++i; | |
} | |
return i; | |
} | |
//----- (00000000000126C5) ---------------------------------------------------- | |
char *__fastcall get_string_until_ch(__int64 a1, char a2, char *a3, int a4) | |
{ | |
char *s; // [rsp+18h] [rbp-18h] | |
int char_in_string; // [rsp+2Ch] [rbp-4h] | |
s = (char *)skip_white_space(a1); | |
if ( a2 == 93 ) | |
char_in_string = (unsigned int)strrchr(s, 93) - (_DWORD)s; | |
else | |
char_in_string = find_char_in_string((__int64)s, a2); | |
if ( char_in_string < 0 ) | |
return 0LL; | |
if ( char_in_string >= a4 ) | |
char_in_string = a4 - 1; | |
strncpy(a3, s, char_in_string); | |
a3[char_in_string] = 0; | |
stripe_white_space_tail(a3); | |
return a3; | |
} | |
// A2C0: using guessed type __int64 __fastcall stripe_white_space_tail(_QWORD); | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
//----- (0000000000012784) ---------------------------------------------------- | |
_BOOL8 __fastcall is_commented_string(__int64 a1) | |
{ | |
_BYTE *v2; // [rsp+18h] [rbp-8h] | |
v2 = (_BYTE *)skip_white_space(a1); | |
return *v2 == 35 || *v2 == 59; | |
} | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
//----- (00000000000127C4) ---------------------------------------------------- | |
__int64 __fastcall Sed_Trans_Str(const char *a1, __int64 a2) | |
{ | |
int v2; // eax | |
int v3; // eax | |
int v5; // [rsp+1Ch] [rbp-14h] | |
unsigned int v6; // [rsp+28h] [rbp-8h] | |
int i; // [rsp+2Ch] [rbp-4h] | |
v5 = strlen(a1); | |
v6 = 0; | |
for ( i = 0; i < v5; ++i ) | |
{ | |
if ( strchr(".*[]^$\\", a1[i]) ) | |
{ | |
v2 = v6++; | |
*(_BYTE *)(v2 + a2) = 92; | |
} | |
v3 = v6++; | |
*(_BYTE *)(a2 + v3) = a1[i]; | |
} | |
*(_BYTE *)((int)v6 + a2) = 0; | |
return v6; | |
} | |
//----- (0000000000012880) ---------------------------------------------------- | |
__int64 __fastcall get_section_name(__int64 a1, char *a2, int a3) | |
{ | |
_BYTE *v5; // [rsp+28h] [rbp-8h] | |
v5 = (_BYTE *)skip_white_space(a1); | |
if ( *v5 == 91 && get_string_until_ch((__int64)(v5 + 1), 93, a2, a3) ) | |
return 0LL; | |
else | |
return 0xFFFFFFFFLL; | |
} | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
//----- (00000000000128DF) ---------------------------------------------------- | |
__int64 __fastcall get_field_name(__int64 a1, char *a2, int a3) | |
{ | |
_BYTE *v5; // [rsp+28h] [rbp-8h] | |
if ( is_commented_string(a1) ) | |
return 0xFFFFFFFFLL; | |
v5 = (_BYTE *)skip_white_space(a1); | |
if ( *v5 == 91 ) | |
return 0xFFFFFFFFLL; | |
if ( !get_string_until_ch((__int64)v5, 61, a2, a3) ) | |
return 0xFFFFFFFFLL; | |
else | |
return 0LL; | |
} | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
//----- (000000000001294F) ---------------------------------------------------- | |
__int64 __fastcall compare_string(__int64 a1, __int64 a2) | |
{ | |
return mb_strcmp(a1, a2); | |
} | |
// A740: using guessed type __int64 __fastcall mb_strcmp(_QWORD, _QWORD); | |
//----- (0000000000012974) ---------------------------------------------------- | |
int __fastcall compare_case_string(const char *a1, const char *a2) | |
{ | |
return strcasecmp(a1, a2); | |
} | |
//----- (0000000000012999) ---------------------------------------------------- | |
__int64 __fastcall compare_string_ex(__int64 a1, __int64 a2, unsigned int a3) | |
{ | |
return mb_strcmp_ex(a1, a2, a3); | |
} | |
// 9D90: using guessed type __int64 __fastcall mb_strcmp_ex(_QWORD, _QWORD, _QWORD); | |
//----- (00000000000129C4) ---------------------------------------------------- | |
int __fastcall compare_string_by_flag(const char *a1, const char *a2) | |
{ | |
if ( dword_237500 ) | |
return strcmp(a1, a2); | |
else | |
return strcasecmp(a1, a2); | |
} | |
// 237500: using guessed type int dword_237500; | |
//----- (0000000000012A08) ---------------------------------------------------- | |
__int64 __fastcall sub_12A08(const char *a1, char *a2, int a3) | |
{ | |
char *v5; // [rsp+28h] [rbp-8h] | |
v5 = strrchr(a1, 47); | |
if ( v5 ) | |
{ | |
if ( strlen(v5 + 1) + 1 <= a3 ) | |
{ | |
strcpy(a2, v5 + 1); | |
} | |
else | |
{ | |
strncpy(a2, v5 + 1, a3 - 1); | |
a2[a3] = 0; | |
} | |
} | |
else if ( strlen(a1) <= a3 ) | |
{ | |
strcpy(a2, a1); | |
} | |
else | |
{ | |
strncpy(a2, a1, a3 - 1); | |
a2[a3] = 0; | |
} | |
return 0LL; | |
} | |
//----- (0000000000012B01) ---------------------------------------------------- | |
__int64 __fastcall String_To_Upper_Case(__int64 a1) | |
{ | |
int i; // [rsp+1Ch] [rbp-14h] | |
for ( i = 0; *(_BYTE *)(i + a1); ++i ) | |
*(_BYTE *)(i + a1) = toupper(*(char *)(i + a1)); | |
return a1; | |
} | |
//----- (0000000000012B64) ---------------------------------------------------- | |
__int64 __fastcall is_pid_alive(unsigned int a1) | |
{ | |
char s[32]; // [rsp+10h] [rbp-30h] BYREF | |
DIR *dirp; // [rsp+30h] [rbp-10h] | |
unsigned int v4; // [rsp+3Ch] [rbp-4h] | |
v4 = 1; | |
sprintf(s, "/proc/%d", a1); | |
dirp = opendir(s); | |
if ( dirp ) | |
closedir(dirp); | |
else | |
return 0; | |
return v4; | |
} | |
//----- (0000000000012BC2) ---------------------------------------------------- | |
__int64 __fastcall Conf_Lock_File(const char *a1, char a2, int a3) | |
{ | |
size_t v3; // rax | |
int v5; // ebx | |
char v7[4]; // [rsp+10h] [rbp-490h] BYREF | |
__pid_t v8; // [rsp+14h] [rbp-48Ch] | |
int v9; // [rsp+18h] [rbp-488h] | |
time_t v10; // [rsp+20h] [rbp-480h] | |
char ptr[4]; // [rsp+30h] [rbp-470h] BYREF | |
unsigned int v12; // [rsp+34h] [rbp-46Ch] | |
int v13; // [rsp+38h] [rbp-468h] | |
time_t v14; // [rsp+40h] [rbp-460h] | |
char s[1032]; // [rsp+50h] [rbp-450h] BYREF | |
time_t v16; // [rsp+458h] [rbp-48h] | |
FILE *stream; // [rsp+460h] [rbp-40h] | |
int fd; // [rsp+46Ch] [rbp-34h] | |
DIR *dirp; // [rsp+470h] [rbp-30h] | |
char *file; // [rsp+478h] [rbp-28h] | |
int v21; // [rsp+484h] [rbp-1Ch] | |
int v22; // [rsp+488h] [rbp-18h] | |
unsigned int v23; // [rsp+48Ch] [rbp-14h] | |
v23 = 0; | |
sub_12A08(a1, s, 1024); | |
v3 = strlen(s); | |
file = (char *)malloc(v3 + 22); | |
if ( !file ) | |
return 4294967286LL; | |
sprintf(file, "%s/%s.lck", "/var/lock/uLinux", s); | |
dirp = opendir("/var/lock/uLinux"); | |
if ( dirp ) | |
{ | |
closedir(dirp); | |
} | |
else if ( mkdir("/var/lock/uLinux", 0x309u) == -1 ) | |
{ | |
v23 = -21; | |
if ( file ) | |
{ | |
free(file); | |
file = 0LL; | |
} | |
return v23; | |
} | |
fd = open64(file, 194, 511LL); | |
if ( fd == -1 ) | |
{ | |
stream = fopen64(file, "rb"); | |
if ( stream ) | |
{ | |
v22 = 0; | |
v21 = 0; | |
v16 = time(0LL); | |
if ( fread(ptr, 0x18uLL, 1uLL, stream) != 24 && (feof(stream) || ferror(stream)) ) | |
{ | |
if ( file ) | |
{ | |
free(file); | |
file = 0LL; | |
} | |
v23 = -21; | |
if ( stream ) | |
fclose(stream); | |
return v23; | |
} | |
fclose(stream); | |
if ( !(unsigned int)is_pid_alive(v12) ) | |
v22 = 1; | |
if ( v14 < v16 ) | |
v22 = 1; | |
if ( toupper(ptr[0]) == 82 ) | |
{ | |
v5 = toupper(ptr[0]); | |
if ( v5 == toupper(a2) ) | |
v21 = 1; | |
} | |
if ( v22 <= 0 ) | |
{ | |
if ( v21 == 1 ) | |
{ | |
stream = fopen64(file, "wb"); | |
if ( stream ) | |
{ | |
++v13; | |
v14 = time(0LL) + a3; | |
fwrite(ptr, 0x18uLL, 1uLL, stream); | |
fclose(stream); | |
} | |
else | |
{ | |
v23 = -21; | |
} | |
} | |
else if ( toupper(a2) == 82 ) | |
{ | |
v23 = -22; | |
} | |
else | |
{ | |
v23 = -23; | |
} | |
} | |
else | |
{ | |
stream = fopen64(file, "wb"); | |
if ( stream ) | |
{ | |
ptr[0] = a2; | |
v12 = getpid(); | |
v13 = 1; | |
v14 = time(0LL) + a3; | |
fwrite(ptr, 0x18uLL, 1uLL, stream); | |
fclose(stream); | |
} | |
else | |
{ | |
v23 = -21; | |
} | |
} | |
} | |
else | |
{ | |
v23 = -21; | |
} | |
} | |
else | |
{ | |
close(fd); | |
stream = fopen64(file, "wb"); | |
if ( stream ) | |
{ | |
v7[0] = a2; | |
v8 = getpid(); | |
v9 = 1; | |
v10 = time(0LL) + a3; | |
fwrite(v7, 0x18uLL, 1uLL, stream); | |
fclose(stream); | |
} | |
else | |
{ | |
v23 = -21; | |
} | |
} | |
if ( v23 == -21 ) | |
unlink(file); | |
free(file); | |
return v23; | |
} | |
// 12BC2: using guessed type char var_490[4]; | |
//----- (000000000001305F) ---------------------------------------------------- | |
__int64 __fastcall Conf_Unlock_File(const char *a1, char a2) | |
{ | |
size_t v2; // rax | |
char ptr[8]; // [rsp+10h] [rbp-430h] BYREF | |
int v5; // [rsp+18h] [rbp-428h] | |
char s[1024]; // [rsp+30h] [rbp-410h] BYREF | |
FILE *stream; // [rsp+430h] [rbp-10h] | |
char *filename; // [rsp+438h] [rbp-8h] | |
sub_12A08(a1, s, 1024); | |
v2 = strlen(s); | |
filename = (char *)malloc(v2 + 22); | |
if ( !filename ) | |
return 4294967286LL; | |
sprintf(filename, "%s/%s.lck", "/var/lock/uLinux", s); | |
stream = fopen64(filename, "rb"); | |
if ( stream ) | |
{ | |
if ( fread(ptr, 0x18uLL, 1uLL, stream) != 24 && !feof(stream) ) | |
ferror(stream); | |
fclose(stream); | |
if ( toupper(a2) == 87 && toupper(ptr[0]) == 87 ) | |
unlink(filename); | |
if ( toupper(a2) == 82 && toupper(ptr[0]) == 82 ) | |
{ | |
if ( v5 > 1 && (stream = fopen64(filename, "wb")) != 0LL ) | |
{ | |
--v5; | |
fwrite(ptr, 0x18uLL, 1uLL, stream); | |
fclose(stream); | |
} | |
else | |
{ | |
unlink(filename); | |
} | |
} | |
} | |
else | |
{ | |
unlink(filename); | |
} | |
free(filename); | |
return 0LL; | |
} | |
// 1305F: using guessed type char ptr[8]; | |
//----- (0000000000013269) ---------------------------------------------------- | |
__int64 __fastcall Open_File(const char *a1, int a2, FILE **a3) | |
{ | |
char modes[15]; // [rsp+20h] [rbp-10h] BYREF | |
char v6; // [rsp+2Fh] [rbp-1h] | |
v6 = 0; | |
modes[1] = 0; | |
if ( a2 ) | |
{ | |
if ( a2 == 1 ) | |
{ | |
modes[0] = 119; | |
v6 = 119; | |
} | |
} | |
else | |
{ | |
modes[0] = 114; | |
v6 = 114; | |
} | |
if ( !(unsigned int)NAS_File_Lock(a1, (unsigned int)v6) ) | |
return 4294967293LL; | |
*a3 = fopen64(a1, modes); | |
if ( *a3 ) | |
return 0LL; | |
NAS_File_Unlock(a1); | |
return 4294967293LL; | |
} | |
// 9CE0: using guessed type __int64 __fastcall NAS_File_Lock(_QWORD, _QWORD); | |
// 9D20: using guessed type __int64 __fastcall NAS_File_Unlock(_QWORD); | |
//----- (000000000001330B) ---------------------------------------------------- | |
__int64 __fastcall Close_File(__int64 a1, __int64 a2, FILE *a3) | |
{ | |
int v4; // [rsp+2Ch] [rbp-4h] | |
v4 = 0; | |
if ( a3 ) | |
v4 = fclose(a3); | |
NAS_File_Unlock(a1); | |
if ( v4 < 0 ) | |
return (unsigned int)-1; | |
return (unsigned int)v4; | |
} | |
// 9D20: using guessed type __int64 __fastcall NAS_File_Unlock(_QWORD); | |
//----- (0000000000013359) ---------------------------------------------------- | |
__int64 __fastcall Get_String_Field(__int64 a1, int a2, char a3, char *a4, int a5) | |
{ | |
int i; // eax | |
char *s; // [rsp+18h] [rbp-28h] | |
int v11; // [rsp+34h] [rbp-Ch] | |
int v12; // [rsp+38h] [rbp-8h] | |
int v13; // [rsp+3Ch] [rbp-4h] | |
v13 = 0; | |
v12 = 0; | |
s = (char *)skip_white_space(a1); | |
for ( i = find_char_in_string((__int64)s, a3); ; i = find_char_in_string((__int64)&s[v11 + 1], a3) ) | |
{ | |
v11 = i; | |
if ( i == -1 ) | |
break; | |
v11 = v12 + i; | |
if ( ++v13 == a2 ) | |
break; | |
v12 = v11 + 1; | |
} | |
if ( v11 == -1 ) | |
{ | |
if ( v13 + 1 == a2 ) | |
{ | |
v11 = strlen(s) + 1; | |
} | |
else if ( v13 + 1 < a2 ) | |
{ | |
return 4294967284LL; | |
} | |
} | |
if ( !a4 ) | |
return (unsigned int)(v11 - v12 + 1); | |
if ( v11 - v12 + 1 <= a5 ) | |
{ | |
strncpy(a4, &s[v12], v11 - v12); | |
a4[v11 - v12] = 0; | |
stripe_white_space_tail(a4); | |
if ( a4[strlen(a4) - 1] == 10 ) | |
a4[strlen(a4) - 1] = 0; | |
return 0LL; | |
} | |
else | |
{ | |
strncpy(a4, &s[v12], a5 - 1); | |
a4[a5 - 1] = 0; | |
return 4294967287LL; | |
} | |
} | |
// A2C0: using guessed type __int64 __fastcall stripe_white_space_tail(_QWORD); | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
//----- (0000000000013511) ---------------------------------------------------- | |
__int64 __fastcall Set_String_Field(__int64 a1, int a2, char a3, const char *a4, char *a5, int a6) | |
{ | |
int i; // eax | |
int v8; // ebx | |
char *s; // [rsp+28h] [rbp-38h] | |
unsigned int v14; // [rsp+34h] [rbp-2Ch] | |
int v15; // [rsp+44h] [rbp-1Ch] | |
int v16; // [rsp+48h] [rbp-18h] | |
int v17; // [rsp+4Ch] [rbp-14h] | |
v17 = 0; | |
v16 = 0; | |
s = (char *)skip_white_space(a1); | |
for ( i = find_char_in_string((__int64)s, a3); ; i = find_char_in_string((__int64)&s[v15 + 1], a3) ) | |
{ | |
v15 = i; | |
if ( i == -1 ) | |
break; | |
v15 = v16 + i; | |
if ( ++v17 == a2 ) | |
break; | |
v16 = v15 + 1; | |
} | |
if ( v15 == -1 ) | |
{ | |
if ( v17 + 1 == a2 ) | |
{ | |
v15 = strlen(s) + 1; | |
} | |
else if ( v17 + 1 < a2 ) | |
{ | |
return 4294967284LL; | |
} | |
} | |
v8 = strlen(s) + v16 - v15; | |
v14 = v8 + strlen(a4) + 1; | |
if ( !a5 ) | |
return v14; | |
if ( a6 >= (int)v14 ) | |
{ | |
strncpy(a5, s, v16); | |
a5[v16] = 0; | |
strcat(a5, a4); | |
if ( v15 != strlen(s) + 1 ) | |
strcat(a5, &s[v15]); | |
stripe_white_space_tail(a5); | |
return 0LL; | |
} | |
else | |
{ | |
strncpy(a5, s, a6 - 1); | |
a5[a6 - 1] = 0; | |
return 4294967287LL; | |
} | |
} | |
// A2C0: using guessed type __int64 __fastcall stripe_white_space_tail(_QWORD); | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
//----- (00000000000136EC) ---------------------------------------------------- | |
__int64 __fastcall Insert_String_Field(__int64 a1, int a2, char a3, const char *a4, char *a5, int a6) | |
{ | |
int v6; // ebx | |
int i; // eax | |
int v9; // ebx | |
char *s; // [rsp+28h] [rbp-38h] | |
unsigned int v15; // [rsp+34h] [rbp-2Ch] | |
unsigned int v16; // [rsp+34h] [rbp-2Ch] | |
int v17; // [rsp+44h] [rbp-1Ch] | |
int v18; // [rsp+48h] [rbp-18h] | |
int v19; // [rsp+4Ch] [rbp-14h] | |
v19 = 0; | |
v18 = 0; | |
s = (char *)skip_white_space(a1); | |
if ( a2 ) | |
{ | |
for ( i = find_char_in_string((__int64)s, a3); ; i = find_char_in_string((__int64)&s[v17 + 1], a3) ) | |
{ | |
v17 = i; | |
if ( i == -1 ) | |
break; | |
v17 = v18 + i; | |
if ( ++v19 == a2 ) | |
break; | |
v18 = v17 + 1; | |
} | |
if ( v17 == -1 ) | |
{ | |
if ( v19 + 1 == a2 ) | |
{ | |
strlen(s); | |
} | |
else if ( v19 + 1 < a2 ) | |
{ | |
return 4294967284LL; | |
} | |
} | |
v9 = strlen(s); | |
v16 = v9 + strlen(a4) + 2; | |
if ( a5 ) | |
{ | |
if ( a6 < (int)v16 ) | |
{ | |
LABEL_5: | |
strncpy(a5, s, a6 - 1); | |
a5[a6 - 1] = 0; | |
return 4294967287LL; | |
} | |
strncpy(a5, s, v18); | |
a5[v18] = a3; | |
a5[v18 + 1] = 0; | |
strcat(a5, a4); | |
strcat(a5, &s[v18]); | |
stripe_white_space_tail(a5); | |
return 0LL; | |
} | |
else | |
{ | |
return v16; | |
} | |
} | |
else | |
{ | |
v6 = strlen(s); | |
v15 = v6 + strlen(a4) + 2; | |
if ( !a5 ) | |
return v15; | |
if ( a6 < (int)v15 ) | |
goto LABEL_5; | |
if ( *s ) | |
sprintf(a5, "%s%c%s", s, (unsigned int)a3, a4); | |
else | |
strcpy(a5, a4); | |
return 0LL; | |
} | |
} | |
// A2C0: using guessed type __int64 __fastcall stripe_white_space_tail(_QWORD); | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
//----- (0000000000013983) ---------------------------------------------------- | |
__int64 __fastcall Remove_String_Field(__int64 a1, int a2, char a3) | |
{ | |
int i; // eax | |
size_t v5; // rax | |
char *s; // [rsp+8h] [rbp-28h] | |
int v8; // [rsp+24h] [rbp-Ch] | |
int v9; // [rsp+28h] [rbp-8h] | |
int v10; // [rsp+2Ch] [rbp-4h] | |
v10 = 0; | |
v9 = 0; | |
s = (char *)skip_white_space(a1); | |
for ( i = find_char_in_string((__int64)s, a3); ; i = find_char_in_string((__int64)&s[v8 + 1], a3) ) | |
{ | |
v8 = i; | |
if ( i == -1 ) | |
break; | |
v8 = v9 + i; | |
if ( ++v10 == a2 ) | |
break; | |
v9 = v8 + 1; | |
} | |
if ( v8 != -1 ) | |
{ | |
LABEL_14: | |
v5 = strlen(s); | |
memmove(&s[v9], &s[v8 + 1], v5 - v8); | |
return 0LL; | |
} | |
if ( v10 + 1 != a2 ) | |
{ | |
if ( v10 + 1 < a2 ) | |
return 4294967284LL; | |
goto LABEL_14; | |
} | |
if ( v9 ) | |
s[v9 - 1] = 0; | |
else | |
*s = 0; | |
return 0LL; | |
} | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
//----- (0000000000013AAC) ---------------------------------------------------- | |
__int64 __fastcall Parse_String_Field(__int64 a1, __int64 a2) | |
{ | |
int j; // [rsp+1Ch] [rbp-14h] | |
char *i; // [rsp+20h] [rbp-10h] | |
__int64 v5; // [rsp+28h] [rbp-8h] | |
v5 = a1; | |
if ( a1 ) | |
{ | |
qword_237548 = a1; | |
dword_23688C = -1; | |
} | |
else if ( qword_237548 ) | |
{ | |
if ( dword_23688C < 0 ) | |
{ | |
v5 = 0LL; | |
} | |
else | |
{ | |
*(_BYTE *)(dword_23688C + qword_237548) = byte_237550; | |
v5 = dword_23688C + 1LL + qword_237548; | |
dword_23688C = -1; | |
} | |
} | |
if ( v5 ) | |
{ | |
for ( i = (char *)v5; *i; ++i ) | |
{ | |
for ( j = 0; *(_BYTE *)(j + a2); ++j ) | |
{ | |
if ( *i == *(_BYTE *)(j + a2) ) | |
{ | |
byte_237550 = *i; | |
dword_23688C = (_DWORD)i - qword_237548; | |
*i = 0; | |
return v5; | |
} | |
} | |
} | |
} | |
return v5; | |
} | |
// 23688C: using guessed type int dword_23688C; | |
// 237548: using guessed type __int64 qword_237548; | |
// 237550: using guessed type char byte_237550; | |
//----- (0000000000013BD3) ---------------------------------------------------- | |
__int64 __fastcall SYS_Get_One_String(const char *a1, int a2, char a3, const char *a4, char *a5, int a6) | |
{ | |
void *v7; // rsp | |
int v8; // eax | |
size_t v9; // rbx | |
char v10[12]; // [rsp+0h] [rbp-90h] BYREF | |
int v11; // [rsp+Ch] [rbp-84h] | |
char *dest; // [rsp+10h] [rbp-80h] | |
const char *v13; // [rsp+18h] [rbp-78h] | |
char v14; // [rsp+20h] [rbp-70h] | |
int v15; // [rsp+24h] [rbp-6Ch] | |
const char *v16; // [rsp+28h] [rbp-68h] | |
FILE *stream; // [rsp+30h] [rbp-60h] BYREF | |
const char *v18; // [rsp+38h] [rbp-58h] | |
__int64 v19; // [rsp+40h] [rbp-50h] | |
int String_Field; // [rsp+4Ch] [rbp-44h] | |
char *s; // [rsp+50h] [rbp-40h] | |
unsigned int v22; // [rsp+58h] [rbp-38h] | |
int v23; // [rsp+5Ch] [rbp-34h] | |
v16 = a1; | |
v15 = a2; | |
v13 = a4; | |
dest = a5; | |
v11 = a6; | |
v14 = a3; | |
stream = 0LL; | |
v22 = 0; | |
v23 = 0; | |
v22 = Open_File(a1, 0, &stream); | |
if ( v22 ) | |
return v22; | |
if ( !stream ) | |
return 4294967293LL; | |
rewind(stream); | |
while ( 1 ) | |
{ | |
s = (char *)get_one_line_of_string(stream); | |
if ( !s ) | |
break; | |
String_Field = Get_String_Field((__int64)s, v15, v14, 0LL, 0); | |
if ( String_Field > 0 ) | |
{ | |
v19 = String_Field - 1LL; | |
v7 = alloca(16 * ((String_Field + 15LL) / 0x10uLL)); | |
v18 = v10; | |
Get_String_Field((__int64)s, v15, v14, v10, String_Field); | |
if ( compare_string_by_flag(v13, v18) ) | |
{ | |
v8 = 1; | |
} | |
else | |
{ | |
v23 = 1; | |
v8 = 0; | |
} | |
if ( v8 != 1 ) | |
break; | |
} | |
} | |
Close_File((__int64)v16, 0LL, stream); | |
if ( !v23 ) | |
return 4294967284LL; | |
if ( !dest ) | |
return (unsigned int)strlen(s) + 1; | |
v9 = v11; | |
if ( v9 >= strlen(s) + 1 ) | |
{ | |
strcpy(dest, s); | |
return 0LL; | |
} | |
else | |
{ | |
strncpy(dest, s, v11 - 1); | |
dest[v11 - 1] = 0; | |
return 4294967287LL; | |
} | |
} | |
// AC40: using guessed type __int64 __fastcall get_one_line_of_string(_QWORD); | |
//----- (0000000000013E0C) ---------------------------------------------------- | |
__int64 __fastcall SYS_Set_One_String(char *a1, int a2, char a3, const char *a4, const char *a5) | |
{ | |
unsigned int v5; // ebx | |
void *v6; // rsp | |
int v7; // eax | |
int v8; // eax | |
int v9; // eax | |
char v11[8]; // [rsp+0h] [rbp-D50h] BYREF | |
char *v12; // [rsp+8h] [rbp-D48h] | |
const char *v13; // [rsp+10h] [rbp-D40h] | |
const char *v14; // [rsp+18h] [rbp-D38h] | |
char v15; // [rsp+20h] [rbp-D30h] | |
int v16; // [rsp+24h] [rbp-D2Ch] | |
char *name; // [rsp+28h] [rbp-D28h] | |
struct stat64 stat_buf; // [rsp+30h] [rbp-D20h] BYREF | |
char s[1024]; // [rsp+C0h] [rbp-C90h] BYREF | |
char resolved[1024]; // [rsp+4C0h] [rbp-890h] BYREF | |
char old[1024]; // [rsp+8C0h] [rbp-490h] BYREF | |
char templatea[32]; // [rsp+CC0h] [rbp-90h] BYREF | |
FILE *v23; // [rsp+CE0h] [rbp-70h] BYREF | |
const char *v24; // [rsp+CE8h] [rbp-68h] | |
__int64 v25; // [rsp+CF0h] [rbp-60h] | |
int String_Field; // [rsp+CFCh] [rbp-54h] | |
char *one_line_of_string; // [rsp+D00h] [rbp-50h] | |
int fd; // [rsp+D08h] [rbp-48h] | |
unsigned int v29; // [rsp+D0Ch] [rbp-44h] | |
FILE *stream; // [rsp+D10h] [rbp-40h] | |
_BOOL4 v31; // [rsp+D18h] [rbp-38h] | |
int v32; // [rsp+D1Ch] [rbp-34h] | |
name = a1; | |
v16 = a2; | |
v14 = a4; | |
v13 = a5; | |
v15 = a3; | |
v23 = 0LL; | |
stream = 0LL; | |
v29 = 0; | |
v32 = 0; | |
strcpy(templatea, "/tmp/temp.XXXXXX"); | |
v31 = sub_2D9E0(a1, &stat_buf) == 0; | |
snprintf(s, 0x400uLL, "%s.lckfile", a1); | |
if ( !(unsigned int)NAS_File_Lock(s, 1LL) ) | |
return (unsigned int)-5; | |
fd = mkstemp64(templatea); | |
if ( fd < 0 ) | |
{ | |
NAS_File_Unlock(s); | |
return (unsigned int)-5; | |
} | |
close(fd); | |
v29 = Open_File(name, 0, &v23); | |
if ( v29 ) | |
{ | |
unlink(templatea); | |
NAS_File_Unlock(s); | |
return v29; | |
} | |
stream = fopen64(templatea, "wb"); | |
if ( !stream ) | |
{ | |
Close_File((__int64)name, 0LL, v23); | |
unlink(templatea); | |
NAS_File_Unlock(s); | |
return (unsigned int)-5; | |
} | |
if ( v23 ) | |
{ | |
while ( 1 ) | |
{ | |
one_line_of_string = (char *)get_one_line_of_string(v23); | |
if ( !one_line_of_string ) | |
break; | |
String_Field = Get_String_Field((__int64)one_line_of_string, v16, v15, 0LL, 0); | |
if ( String_Field > 0 ) | |
{ | |
v12 = v11; | |
v25 = String_Field - 1LL; | |
v6 = alloca(16 * ((String_Field + 15LL) / 0x10uLL)); | |
v24 = v11; | |
Get_String_Field((__int64)one_line_of_string, v16, v15, v11, String_Field); | |
if ( compare_string_by_flag(v14, v24) ) | |
{ | |
if ( fputs(one_line_of_string, stream) >= 0 ) | |
{ | |
fputc(10, stream); | |
v7 = 2; | |
} | |
else | |
{ | |
Close_File((__int64)name, 0LL, v23); | |
if ( stream ) | |
fclose(stream); | |
unlink(templatea); | |
NAS_File_Unlock(s); | |
v5 = -5; | |
v7 = 1; | |
} | |
} | |
else | |
{ | |
v32 = 1; | |
fprintf(stream, "%s\n", v13); | |
v7 = 0; | |
} | |
if ( v7 && v7 != 2 ) | |
return v5; | |
} | |
} | |
Close_File((__int64)name, 0LL, v23); | |
if ( fflush(stream) < 0 && (*__errno_location() == 28 || *__errno_location() == 5) ) | |
v8 = -1; | |
else | |
v8 = 0; | |
v29 = v8; | |
if ( fclose(stream) < 0 || (v29 & 0x80000000) != 0 ) | |
goto LABEL_33; | |
if ( !v32 ) | |
{ | |
NAS_File_Unlock(s); | |
return (unsigned int)-12; | |
} | |
realpath(name, resolved); | |
sprintf(old, "%s.bak", resolved); | |
v29 = Open_File(old, 1, &v23); | |
if ( v29 ) | |
{ | |
NAS_File_Unlock(s); | |
return v29; | |
} | |
stream = fopen64(templatea, "rb"); | |
if ( !stream ) | |
{ | |
Close_File((__int64)old, 1LL, v23); | |
unlink(old); | |
unlink(templatea); | |
NAS_File_Unlock(s); | |
return (unsigned int)-5; | |
} | |
while ( 1 ) | |
{ | |
one_line_of_string = (char *)get_one_line_of_string(stream); | |
if ( !one_line_of_string ) | |
break; | |
fputs(one_line_of_string, v23); | |
fputc(10, v23); | |
} | |
if ( fflush(v23) < 0 && (*__errno_location() == 28 || *__errno_location() == 5) ) | |
v9 = -1; | |
else | |
v9 = 0; | |
v29 = v9; | |
if ( (int)Close_File((__int64)old, 1LL, v23) < 0 || (v29 & 0x80000000) != 0 ) | |
{ | |
unlink(old); | |
if ( stream ) | |
fclose(stream); | |
LABEL_33: | |
unlink(templatea); | |
NAS_File_Unlock(s); | |
return (unsigned int)-5; | |
} | |
if ( rename(old, resolved) == -1 ) | |
{ | |
unlink(old); | |
if ( stream ) | |
fclose(stream); | |
LABEL_54: | |
unlink(templatea); | |
NAS_File_Unlock(s); | |
return (unsigned int)-1; | |
} | |
if ( v31 && chmod(resolved, stat_buf.st_mode) == -1 ) | |
{ | |
if ( stream ) | |
fclose(stream); | |
goto LABEL_54; | |
} | |
if ( stream ) | |
fclose(stream); | |
unlink(templatea); | |
NAS_File_Unlock(s); | |
return 0; | |
} | |
else | |
{ | |
Close_File((__int64)name, 0LL, 0LL); | |
if ( stream ) | |
fclose(stream); | |
unlink(templatea); | |
NAS_File_Unlock(s); | |
return (unsigned int)-3; | |
} | |
} | |
// 1455D: variable 'v5' is possibly undefined | |
// 9CE0: using guessed type __int64 __fastcall NAS_File_Lock(_QWORD, _QWORD); | |
// 9D20: using guessed type __int64 __fastcall NAS_File_Unlock(_QWORD); | |
// AC40: using guessed type __int64 __fastcall get_one_line_of_string(_QWORD); | |
// 13E0C: using guessed type char anonymous_0[8]; | |
//----- (000000000001456E) ---------------------------------------------------- | |
const char *__fastcall Conf_Dir_Get_Str(__int64 a1, const char *a2, const char *a3, const char *a4, char *a5, int a6) | |
{ | |
int i; // [rsp+3Ch] [rbp-14h] | |
if ( !a1 || !a3 || !a2 ) | |
return 0LL; | |
for ( i = 0; *(_DWORD *)(a1 + 1028) > i; ++i ) | |
{ | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1072)) | |
&& *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1056)) | |
&& !strcasecmp(a3, *(const char **)(8LL * i + *(_QWORD *)(a1 + 1072))) | |
&& !strcasecmp(a2, *(const char **)(8LL * i + *(_QWORD *)(a1 + 1056))) ) | |
{ | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1064)) ) | |
{ | |
if ( !a5 || a6 < strlen(*(const char **)(8LL * i + *(_QWORD *)(a1 + 1064))) ) | |
return *(const char **)(8LL * i + *(_QWORD *)(a1 + 1064)); | |
strcpy(a5, *(const char **)(8LL * i + *(_QWORD *)(a1 + 1064))); | |
return *(const char **)(8LL * i + *(_QWORD *)(a1 + 1064)); | |
} | |
break; | |
} | |
} | |
if ( a5 && a4 ) | |
{ | |
if ( strlen(a4) >= a6 ) | |
{ | |
strncpy(a5, a4, a6 - 1); | |
a5[a6] = 0; | |
} | |
else | |
{ | |
strncpy(a5, a4, a6); | |
} | |
} | |
if ( a4 ) | |
return a4; | |
else | |
return 0LL; | |
} | |
//----- (00000000000147C6) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Get_Int(__int64 a1, const char *a2, const char *a3, unsigned int a4, unsigned int *a5) | |
{ | |
char s[68]; // [rsp+30h] [rbp-50h] BYREF | |
unsigned int v9; // [rsp+74h] [rbp-Ch] | |
char *nptr; // [rsp+78h] [rbp-8h] | |
sprintf(s, "%d", a4); | |
nptr = (char *)Conf_Dir_Get_Str(a1, a2, a3, s, 0LL, 0); | |
v9 = atoi(nptr); | |
if ( a5 ) | |
*a5 = v9; | |
return v9; | |
} | |
//----- (0000000000014848) ---------------------------------------------------- | |
_BOOL8 __fastcall Conf_Dir_Get_Bool(__int64 a1, const char *a2, const char *a3, int a4, _BOOL4 *a5) | |
{ | |
const char *v5; // rax | |
const char *Str; // rax | |
bool v7; // bl | |
const char *v8; // rax | |
const char *v9; // rax | |
int v10; // ebx | |
const char *v11; // rax | |
const char *v12; // rax | |
_BOOL4 v17; // [rsp+3Ch] [rbp-14h] | |
if ( a4 ) | |
v5 = "TRUE"; | |
else | |
v5 = "FALSE"; | |
Str = Conf_Dir_Get_Str(a1, a2, a3, v5, 0LL, 0); | |
v7 = strcasecmp(Str, "TRUE") == 0; | |
if ( a4 ) | |
v8 = "TRUE"; | |
else | |
v8 = "FALSE"; | |
v9 = Conf_Dir_Get_Str(a1, a2, a3, v8, 0LL, 0); | |
v10 = v7 | (strcasecmp(v9, "YES") == 0); | |
if ( a4 ) | |
v11 = "TRUE"; | |
else | |
v11 = "FALSE"; | |
v12 = Conf_Dir_Get_Str(a1, a2, a3, v11, 0LL, 0); | |
v17 = (v10 | (atoi(v12) != 0)) != 0; | |
if ( a5 ) | |
*a5 = v17; | |
return v17; | |
} | |
//----- (0000000000014972) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Remove(__int64 a1, const char *a2, const char *a3) | |
{ | |
int i; // [rsp+2Ch] [rbp-4h] | |
if ( !a1 || !a3 || !a2 ) | |
return 1LL; | |
for ( i = 0; *(_DWORD *)(a1 + 1028) > i; ++i ) | |
{ | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1072)) | |
&& *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1056)) | |
&& !strcasecmp(a2, *(const char **)(8LL * i + *(_QWORD *)(a1 + 1056))) | |
&& !strcasecmp(a3, *(const char **)(8LL * i + *(_QWORD *)(a1 + 1072))) ) | |
{ | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1064)) ) | |
{ | |
free(*(void **)(8LL * i + *(_QWORD *)(a1 + 1064))); | |
*(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1064)) = 0LL; | |
} | |
free(*(void **)(8LL * i + *(_QWORD *)(a1 + 1056))); | |
free(*(void **)(8LL * i + *(_QWORD *)(a1 + 1072))); | |
*(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1056)) = 0LL; | |
*(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1072)) = 0LL; | |
} | |
} | |
return 0LL; | |
} | |
//----- (0000000000014B5E) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Dump(__int64 a1) | |
{ | |
const char *v1; // rax | |
int j; // [rsp+18h] [rbp-8h] | |
int i; // [rsp+1Ch] [rbp-4h] | |
puts("======[DUMP CONFIG START]======"); | |
for ( i = 0; *(_DWORD *)(a1 + 1032) > i; ++i ) | |
{ | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1048)) ) | |
{ | |
printf("[%s]\n", *(const char **)(8LL * i + *(_QWORD *)(a1 + 1048))); | |
for ( j = 0; *(_DWORD *)(a1 + 1028) > j; ++j ) | |
{ | |
if ( *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1056)) | |
&& *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1072)) | |
&& !strcasecmp( | |
*(const char **)(8LL * j + *(_QWORD *)(a1 + 1056)), | |
*(const char **)(8LL * i + *(_QWORD *)(a1 + 1048))) ) | |
{ | |
if ( *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1064)) ) | |
v1 = *(const char **)(8LL * j + *(_QWORD *)(a1 + 1064)); | |
else | |
v1 = (const char *)&unk_2E32E; | |
printf("%s = %s\n", *(const char **)(8LL * j + *(_QWORD *)(a1 + 1072)), v1); | |
} | |
} | |
} | |
} | |
puts("======[DUMP CONFIG FINISH]======"); | |
return 0LL; | |
} | |
//----- (0000000000014D25) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Add_Sec(__int64 a1, const char *a2) | |
{ | |
char **v3; // rbx | |
int i; // [rsp+1Ch] [rbp-14h] | |
int v5; // [rsp+1Ch] [rbp-14h] | |
for ( i = 0; *(_DWORD *)(a1 + 1032) > i; ++i ) | |
{ | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1048)) | |
&& !strcmp(*(const char **)(8LL * i + *(_QWORD *)(a1 + 1048)), a2) ) | |
{ | |
return 0LL; | |
} | |
} | |
v5 = *(_DWORD *)(a1 + 1032); | |
if ( v5 == *(_DWORD *)(a1 + 1036) ) | |
{ | |
*(_QWORD *)(a1 + 1048) = realloc(*(void **)(a1 + 1048), 8LL * (*(_DWORD *)(a1 + 1036) + 128)); | |
if ( !*(_QWORD *)(a1 + 1048) ) | |
return 1LL; | |
memset((void *)(*(_QWORD *)(a1 + 1048) + 8LL * *(int *)(a1 + 1036)), 0, 0x400uLL); | |
*(_DWORD *)(a1 + 1036) += 128; | |
} | |
v3 = (char **)(*(_QWORD *)(a1 + 1048) + 8LL * v5); | |
*v3 = strdup(a2); | |
++*(_DWORD *)(a1 + 1032); | |
return 0LL; | |
} | |
//----- (0000000000014EBF) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Add(__int64 a1, const char *a2, const char *a3, const char *a4) | |
{ | |
char **v5; // rbx | |
char **v6; // rbx | |
char *v7; // rax | |
char **v8; // rbx | |
char *v9; // rax | |
int v12; // [rsp+2Ch] [rbp-14h] | |
v12 = *(_DWORD *)(a1 + 1028); | |
if ( v12 == *(_DWORD *)(a1 + 1040) ) | |
{ | |
*(_QWORD *)(a1 + 1064) = realloc(*(void **)(a1 + 1064), 8LL * (*(_DWORD *)(a1 + 1040) + 128)); | |
*(_QWORD *)(a1 + 1072) = realloc(*(void **)(a1 + 1072), 8LL * (*(_DWORD *)(a1 + 1040) + 128)); | |
*(_QWORD *)(a1 + 1056) = realloc(*(void **)(a1 + 1056), 8LL * (*(_DWORD *)(a1 + 1040) + 128)); | |
if ( !*(_QWORD *)(a1 + 1064) || !*(_QWORD *)(a1 + 1072) || !*(_QWORD *)(a1 + 1056) ) | |
{ | |
_conf_set_field_err(a1, a2, a3, a4); | |
return 1LL; | |
} | |
memset((void *)(*(_QWORD *)(a1 + 1064) + 8LL * *(int *)(a1 + 1040)), 0, 0x80uLL); | |
memset((void *)(*(_QWORD *)(a1 + 1072) + 8LL * *(int *)(a1 + 1040)), 0, 0x80uLL); | |
memset((void *)(*(_QWORD *)(a1 + 1056) + 8LL * *(int *)(a1 + 1040)), 0, 0x80uLL); | |
*(_DWORD *)(a1 + 1040) += 128; | |
} | |
v5 = (char **)(*(_QWORD *)(a1 + 1056) + 8LL * v12); | |
*v5 = strdup(a2); | |
v6 = (char **)(*(_QWORD *)(a1 + 1072) + 8LL * v12); | |
if ( a3 ) | |
v7 = strdup(a3); | |
else | |
v7 = 0LL; | |
*v6 = v7; | |
v8 = (char **)(*(_QWORD *)(a1 + 1064) + 8LL * v12); | |
if ( a4 ) | |
v9 = strdup(a4); | |
else | |
v9 = 0LL; | |
*v8 = v9; | |
++*(_DWORD *)(a1 + 1028); | |
return 0LL; | |
} | |
// A070: using guessed type __int64 __fastcall _conf_set_field_err(_QWORD, _QWORD, _QWORD, _QWORD); | |
//----- (0000000000015165) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Wirte_File(__int64 a1) | |
{ | |
const char *v2; // rax | |
struct stat64 stat_buf; // [rsp+10h] [rbp-DE0h] BYREF | |
char ptr[272]; // [rsp+A0h] [rbp-D50h] BYREF | |
char filename[1024]; // [rsp+1B0h] [rbp-C40h] BYREF | |
char s[1024]; // [rsp+5B0h] [rbp-840h] BYREF | |
char resolved[1024]; // [rsp+9B0h] [rbp-440h] BYREF | |
char templatea[24]; // [rsp+DB0h] [rbp-40h] BYREF | |
int fd; // [rsp+DC8h] [rbp-28h] | |
unsigned int v10; // [rsp+DCCh] [rbp-24h] | |
_BOOL4 v11; // [rsp+DD0h] [rbp-20h] | |
unsigned int v12; // [rsp+DD4h] [rbp-1Ch] | |
FILE *v13; // [rsp+DD8h] [rbp-18h] | |
FILE *stream; // [rsp+DE0h] [rbp-10h] | |
int j; // [rsp+DE8h] [rbp-8h] | |
int i; // [rsp+DECh] [rbp-4h] | |
stream = 0LL; | |
v13 = 0LL; | |
strcpy(templatea, "/tmp/temp.XXXXXX"); | |
v12 = -5; | |
v11 = sub_2D9E0((char *)a1, &stat_buf) == 0; | |
snprintf(s, 0x400uLL, "%s.lckfile", (const char *)a1); | |
v10 = Ini_Conf_Write_Lock_File_Timeout(s, 300LL); | |
if ( v10 == -1 ) | |
return v12; | |
fd = mkstemp64(templatea); | |
if ( fd >= 0 ) | |
{ | |
close(fd); | |
stream = fopen64(templatea, "wb"); | |
if ( stream ) | |
{ | |
for ( i = 0; *(_DWORD *)(a1 + 1032) > i; ++i ) | |
{ | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1048)) ) | |
{ | |
fprintf(stream, "\n[%s]\n", *(const char **)(8LL * i + *(_QWORD *)(a1 + 1048))); | |
for ( j = 0; *(_DWORD *)(a1 + 1028) > j; ++j ) | |
{ | |
if ( *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1056)) | |
&& *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1072)) | |
&& !strcasecmp( | |
*(const char **)(8LL * j + *(_QWORD *)(a1 + 1056)), | |
*(const char **)(8LL * i + *(_QWORD *)(a1 + 1048))) ) | |
{ | |
if ( *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1064)) ) | |
v2 = *(const char **)(8LL * j + *(_QWORD *)(a1 + 1064)); | |
else | |
v2 = (const char *)&unk_2E32E; | |
fprintf(stream, "%s = %s\n", *(const char **)(8LL * j + *(_QWORD *)(a1 + 1072)), v2); | |
} | |
} | |
} | |
} | |
fputc(10, stream); | |
if ( fflush(stream) >= 0 || *__errno_location() != 28 && *__errno_location() != 5 ) | |
{ | |
fclose(stream); | |
realpath((const char *)a1, resolved); | |
sprintf(filename, "%s.bak", resolved); | |
stream = fopen64(templatea, "rb"); | |
v13 = fopen64(filename, "wb"); | |
if ( stream ) | |
{ | |
if ( v13 ) | |
{ | |
while ( 1 ) | |
{ | |
i = fread(ptr, 1uLL, 0x101uLL, stream); | |
if ( i <= 0 ) | |
break; | |
fwrite(ptr, 1uLL, i, v13); | |
} | |
if ( (fflush(v13) >= 0 || *__errno_location() != 28 && *__errno_location() != 5) | |
&& rename(filename, resolved) >= 0 | |
&& (!v11 || chmod(resolved, stat_buf.st_mode) != -1) ) | |
{ | |
v12 = 0; | |
} | |
} | |
} | |
} | |
} | |
Ini_Conf_Unlock_File(v10); | |
unlink(templatea); | |
if ( stream ) | |
fclose(stream); | |
if ( v13 ) | |
fclose(v13); | |
return v12; | |
} | |
else | |
{ | |
NAS_File_Unlock(s); | |
return v12; | |
} | |
} | |
// 9D00: using guessed type __int64 __fastcall Ini_Conf_Write_Lock_File_Timeout(_QWORD, _QWORD); | |
// 9D20: using guessed type __int64 __fastcall NAS_File_Unlock(_QWORD); | |
// A3E0: using guessed type __int64 __fastcall Ini_Conf_Unlock_File(_QWORD); | |
//----- (000000000001560F) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Set_Str(__int64 a1, const char *a2, const char *a3, const char *a4) | |
{ | |
char **v5; // rbx | |
int v8; // [rsp+28h] [rbp-18h] | |
int i; // [rsp+2Ch] [rbp-14h] | |
v8 = 0; | |
if ( !a1 || !a3 || !a2 || !a4 ) | |
return 0xFFFFFFFFLL; | |
if ( *(int *)(a1 + 1028) > 0 ) | |
{ | |
for ( i = 0; *(_DWORD *)(a1 + 1028) > i; ++i ) | |
{ | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1056)) ) | |
{ | |
if ( !strcasecmp(a2, *(const char **)(8LL * i + *(_QWORD *)(a1 + 1056))) ) | |
{ | |
v8 = 1; | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1072)) ) | |
{ | |
if ( !strcmp(a3, *(const char **)(8LL * i + *(_QWORD *)(a1 + 1072))) ) | |
{ | |
if ( strcmp(a4, *(const char **)(8LL * i + *(_QWORD *)(a1 + 1064))) ) | |
{ | |
free(*(void **)(8LL * i + *(_QWORD *)(a1 + 1064))); | |
v5 = (char **)(*(_QWORD *)(a1 + 1064) + 8LL * i); | |
*v5 = strdup(a4); | |
} | |
return 0LL; | |
} | |
} | |
} | |
} | |
} | |
} | |
if ( !v8 ) | |
Conf_Dir_Add_Sec(a1, a2); | |
if ( *(_DWORD *)(a1 + 1024) | |
&& (!strcasecmp(a2, "System") | |
|| !strcasecmp(a2, "Storage") | |
|| !strcasecmp(a2, "Misc") | |
|| !strcasecmp(a2, "LDAP") | |
|| !strcasecmp(a2, "WebFS") | |
|| !strcasecmp(a2, "Samba")) ) | |
{ | |
SHM_Set_Field(a2, a3, a4); | |
} | |
return Conf_Dir_Add(a1, a2, a3, a4); | |
} | |
// A420: using guessed type __int64 __fastcall SHM_Set_Field(_QWORD, _QWORD, _QWORD); | |
//----- (00000000000158AD) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Set_Int(__int64 a1, const char *a2, const char *a3, unsigned int a4) | |
{ | |
char s[64]; // [rsp+20h] [rbp-40h] BYREF | |
sprintf(s, "%d", a4); | |
return Conf_Dir_Set_Str(a1, a2, a3, s); | |
} | |
//----- (00000000000158F9) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Set_Bool(__int64 a1, const char *a2, const char *a3, int a4) | |
{ | |
const char *v4; // rax | |
if ( a4 ) | |
v4 = "TRUE"; | |
else | |
v4 = "FALSE"; | |
return Conf_Dir_Set_Str(a1, a2, a3, v4); | |
} | |
//----- (000000000001593C) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Set_Long(__int64 a1, const char *a2, const char *a3, __int64 a4) | |
{ | |
char s[64]; // [rsp+20h] [rbp-40h] BYREF | |
sprintf(s, "%ld", a4); | |
return Conf_Dir_Set_Str(a1, a2, a3, s); | |
} | |
//----- (000000000001598A) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Set_Longlong(__int64 a1, const char *a2, const char *a3, __int64 a4) | |
{ | |
char s[64]; // [rsp+20h] [rbp-40h] BYREF | |
sprintf(s, "%lld", a4); | |
return Conf_Dir_Set_Str(a1, a2, a3, s); | |
} | |
//----- (00000000000159D8) ---------------------------------------------------- | |
void __fastcall Conf_Dir_Free(__int64 a1) | |
{ | |
int i; // [rsp+1Ch] [rbp-4h] | |
int j; // [rsp+1Ch] [rbp-4h] | |
if ( a1 ) | |
{ | |
for ( i = 0; *(_DWORD *)(a1 + 1028) > i; ++i ) | |
{ | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1072)) ) | |
free(*(void **)(8LL * i + *(_QWORD *)(a1 + 1072))); | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1064)) ) | |
free(*(void **)(8LL * i + *(_QWORD *)(a1 + 1064))); | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1056)) ) | |
free(*(void **)(8LL * i + *(_QWORD *)(a1 + 1056))); | |
} | |
for ( j = 0; *(_DWORD *)(a1 + 1032) > j; ++j ) | |
{ | |
if ( *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1048)) ) | |
free(*(void **)(8LL * j + *(_QWORD *)(a1 + 1048))); | |
} | |
free(*(void **)(a1 + 1048)); | |
free(*(void **)(a1 + 1056)); | |
free(*(void **)(a1 + 1064)); | |
free(*(void **)(a1 + 1072)); | |
free((void *)a1); | |
} | |
} | |
//----- (0000000000015B95) ---------------------------------------------------- | |
char *__fastcall Conf_Dir_Load(const char *a1) | |
{ | |
size_t v2; // rax | |
size_t v3; // rax | |
char s[128]; // [rsp+10h] [rbp-C0h] BYREF | |
char *v5; // [rsp+90h] [rbp-40h] | |
char *v6; // [rsp+98h] [rbp-38h] | |
char *src; // [rsp+A0h] [rbp-30h] | |
char *v8; // [rsp+A8h] [rbp-28h] | |
FILE *stream; // [rsp+B0h] [rbp-20h] | |
char *one_line_of_string; // [rsp+B8h] [rbp-18h] | |
char *v11; // [rsp+C0h] [rbp-10h] | |
int v12; // [rsp+CCh] [rbp-4h] | |
stream = 0LL; | |
v12 = 0; | |
memset(s, 0, sizeof(s)); | |
stream = fopen64(a1, "r"); | |
pthread_mutex_lock(&mutex); | |
v11 = (char *)calloc(1uLL, 0x438uLL); | |
if ( v11 ) | |
{ | |
if ( !strcmp(a1, "/etc/config/uLinux.conf") ) | |
*((_DWORD *)v11 + 256) = 1; | |
snprintf(v11, 0x400uLL, "%s", a1); | |
*((_DWORD *)v11 + 260) = 128; | |
*((_DWORD *)v11 + 259) = 128; | |
*((_DWORD *)v11 + 257) = 0; | |
*((_DWORD *)v11 + 258) = 0; | |
*((_QWORD *)v11 + 132) = calloc(0x80uLL, 8uLL); | |
*((_QWORD *)v11 + 133) = calloc(0x80uLL, 8uLL); | |
*((_QWORD *)v11 + 134) = calloc(0x80uLL, 8uLL); | |
*((_QWORD *)v11 + 131) = calloc(0x80uLL, 8uLL); | |
if ( stream ) | |
{ | |
while ( 1 ) | |
{ | |
one_line_of_string = (char *)get_one_line_of_string(stream); | |
if ( !one_line_of_string ) | |
break; | |
v8 = (char *)skip_white_space(one_line_of_string); | |
if ( *v8 == 91 ) | |
{ | |
src = v8 + 1; | |
v2 = strlen(v8 + 1); | |
for ( one_line_of_string = &src[v2 - 1]; | |
*one_line_of_string != 93 && one_line_of_string != src; | |
--one_line_of_string ) | |
{ | |
; | |
} | |
*one_line_of_string = 0; | |
src = (char *)skip_white_space(src); | |
src = (char *)stripe_white_space_tail(src); | |
strncpy(s, src, 0x80uLL); | |
v12 = Conf_Dir_Add_Sec((__int64)v11, src); | |
} | |
else if ( !is_commented_string((__int64)v8) ) | |
{ | |
one_line_of_string = v8; | |
v6 = v8; | |
while ( *one_line_of_string != 61 && *one_line_of_string ) | |
++one_line_of_string; | |
if ( *one_line_of_string ) | |
{ | |
*one_line_of_string = 0; | |
v5 = one_line_of_string + 1; | |
v6 = (char *)stripe_white_space_tail(v6); | |
v5 = (char *)skip_white_space(v5); | |
v5 = (char *)stripe_white_space_tail(v5); | |
v3 = strlen(v5); | |
for ( one_line_of_string = &v5[v3 - 1]; | |
(*one_line_of_string == 10 || *one_line_of_string == 13) && one_line_of_string != v5; | |
--one_line_of_string ) | |
{ | |
; | |
} | |
if ( *one_line_of_string == 10 || *one_line_of_string == 13 ) | |
*one_line_of_string = 0; | |
one_line_of_string[1] = 0; | |
v12 = Conf_Dir_Add((__int64)v11, s, v6, v5); | |
} | |
} | |
} | |
} | |
if ( v12 ) | |
{ | |
Conf_Dir_Free((__int64)v11); | |
v11 = 0LL; | |
} | |
if ( stream ) | |
fclose(stream); | |
pthread_mutex_unlock(&mutex); | |
return v11; | |
} | |
else | |
{ | |
if ( stream ) | |
fclose(stream); | |
return 0LL; | |
} | |
} | |
// A2C0: using guessed type __int64 __fastcall stripe_white_space_tail(_QWORD); | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
// AC40: using guessed type __int64 __fastcall get_one_line_of_string(_QWORD); | |
//----- (0000000000015F73) ---------------------------------------------------- | |
__int64 __fastcall Conf_Case_Sensitive(unsigned int a1) | |
{ | |
__int64 result; // rax | |
result = a1; | |
dword_237500 = a1; | |
return result; | |
} | |
// 237500: using guessed type int dword_237500; | |
//----- (0000000000015F85) ---------------------------------------------------- | |
__int64 __fastcall Conf_Force_Write(unsigned int a1) | |
{ | |
__int64 result; // rax | |
result = a1; | |
dword_237504 = a1; | |
return result; | |
} | |
// 237504: using guessed type int dword_237504; | |
//----- (0000000000015F97) ---------------------------------------------------- | |
__int64 __fastcall Conf_Get_Field(__int64 a1, __int64 a2, __int64 a3, __int64 a4, unsigned int a5) | |
{ | |
return Ini_Conf_Get_Field_Compatible(a1, a2, a3, a4, a5); | |
} | |
// A8D0: using guessed type __int64 __fastcall Ini_Conf_Get_Field_Compatible(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); | |
//----- (0000000000015FD3) ---------------------------------------------------- | |
__int64 __fastcall Conf_Get_Field_NoLock(const char *a1, const char *a2, const char *a3, char *a4, int a5) | |
{ | |
__int64 v6; // rax | |
__int64 v7; // rax | |
char *src; // [rsp+38h] [rbp-48h] | |
const char *v12; // [rsp+40h] [rbp-40h] | |
char *s; // [rsp+48h] [rbp-38h] | |
char *sa; // [rsp+48h] [rbp-38h] | |
__int64 v15; // [rsp+50h] [rbp-30h] | |
FILE *stream; // [rsp+58h] [rbp-28h] | |
_BOOL4 v17; // [rsp+64h] [rbp-1Ch] | |
char *i; // [rsp+68h] [rbp-18h] | |
_BYTE *j; // [rsp+68h] [rbp-18h] | |
char *k; // [rsp+68h] [rbp-18h] | |
__int64 one_line_of_string; // [rsp+68h] [rbp-18h] | |
v17 = 0; | |
stream = fopen64(a1, "r"); | |
if ( !stream ) | |
return 4294967290LL; | |
if ( !a2 || !*a2 ) | |
v17 = 1; | |
while ( 1 ) | |
{ | |
do | |
{ | |
while ( 1 ) | |
{ | |
while ( 1 ) | |
{ | |
one_line_of_string = get_one_line_of_string(stream); | |
if ( !one_line_of_string ) | |
{ | |
LABEL_39: | |
fclose(stream); | |
return 4294967290LL; | |
} | |
v15 = skip_white_space(one_line_of_string); | |
if ( *(_BYTE *)v15 == 91 ) | |
break; | |
if ( v17 ) | |
goto LABEL_18; | |
} | |
s = (char *)(v15 + 1); | |
for ( i = (char *)(strlen((const char *)(v15 + 1)) + v15); *i != 93 && i != s; --i ) | |
; | |
if ( i == s ) | |
break; | |
if ( v17 ) | |
goto LABEL_39; | |
*i = 0; | |
v6 = skip_white_space(s); | |
sa = (char *)stripe_white_space_tail(v6); | |
v17 = compare_string_by_flag(sa, a2) == 0; | |
} | |
} | |
while ( !v17 ); | |
LABEL_18: | |
if ( !is_commented_string(v15) ) | |
{ | |
for ( j = (_BYTE *)v15; *j != 61 && *j; ++j ) | |
; | |
if ( *j ) | |
{ | |
*j = 0; | |
v12 = (const char *)stripe_white_space_tail(v15); | |
if ( !compare_string_by_flag(a3, v12) ) | |
break; | |
} | |
} | |
} | |
v7 = skip_white_space(j + 1); | |
src = (char *)stripe_white_space_tail(v7); | |
for ( k = &src[strlen(src) - 1]; (*k == 10 || *k == 13) && k != src; --k ) | |
; | |
if ( *k == 10 || *k == 13 ) | |
*k = 0; | |
k[1] = 0; | |
if ( a4 ) | |
{ | |
if ( a5 >= strlen(src) + 1 ) | |
{ | |
strcpy(a4, src); | |
fclose(stream); | |
return 0LL; | |
} | |
else | |
{ | |
fclose(stream); | |
return 4294967287LL; | |
} | |
} | |
else | |
{ | |
fclose(stream); | |
return (unsigned int)strlen(src) + 1; | |
} | |
} | |
// A2C0: using guessed type __int64 __fastcall stripe_white_space_tail(_QWORD); | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
// AC40: using guessed type __int64 __fastcall get_one_line_of_string(_QWORD); | |
//----- (00000000000162EF) ---------------------------------------------------- | |
__int64 __fastcall Conf_Enum_Section(const char *a1, char *a2, int a3) | |
{ | |
FILE *stream; // [rsp+28h] [rbp-18h] BYREF | |
__int64 one_line_of_string; // [rsp+30h] [rbp-10h] | |
unsigned int v7; // [rsp+3Ch] [rbp-4h] | |
stream = 0LL; | |
if ( a1 ) | |
{ | |
if ( qword_237558 ) | |
{ | |
Close_File((__int64)byte_237580, 0LL, (FILE *)qword_237558); | |
qword_237558 = 0LL; | |
} | |
v7 = Open_File(a1, 0, &stream); | |
if ( v7 ) | |
return v7; | |
snprintf(byte_237580, 0x400uLL, "%s", a1); | |
qword_237558 = (__int64)stream; | |
rewind(stream); | |
} | |
if ( qword_237558 ) | |
{ | |
while ( 1 ) | |
{ | |
one_line_of_string = get_one_line_of_string(qword_237558); | |
if ( !one_line_of_string ) | |
break; | |
if ( !(unsigned int)get_section_name(one_line_of_string, a2, a3) ) | |
return 0LL; | |
} | |
} | |
if ( qword_237558 ) | |
{ | |
Close_File((__int64)byte_237580, 0LL, (FILE *)qword_237558); | |
qword_237558 = 0LL; | |
} | |
return 0xFFFFFFFFLL; | |
} | |
// AC40: using guessed type __int64 __fastcall get_one_line_of_string(_QWORD); | |
// 237558: using guessed type __int64 qword_237558; | |
//----- (000000000001642A) ---------------------------------------------------- | |
__int64 __fastcall conf_remove_section_err(const char *a1, const char *a2) | |
{ | |
__int64 result; // rax | |
char v3[4]; // [rsp+10h] [rbp-1120h] BYREF | |
int v4; // [rsp+14h] [rbp-111Ch] | |
char v5; // [rsp+50h] [rbp-10E0h] | |
char v6; // [rsp+91h] [rbp-109Fh] | |
char v7; // [rsp+D2h] [rbp-105Eh] | |
char v8[2061]; // [rsp+113h] [rbp-101Dh] BYREF | |
char s[2056]; // [rsp+920h] [rbp-810h] BYREF | |
char *v10; // [rsp+1128h] [rbp-8h] | |
result = _is_ram_almost_full(); | |
if ( (_DWORD)result ) | |
{ | |
v10 = message01; | |
snprintf(s, 0x800uLL, "%s (file = [%s], section = [%s]) %s", message00, a1, a2, message01); | |
v4 = 2; | |
v6 = 0; | |
v5 = 0; | |
v7 = 0; | |
strncpy(v8, s, 0x800uLL); | |
return naslog_event_add(v3); | |
} | |
return result; | |
} | |
// A020: using guessed type __int64 __fastcall naslog_event_add(_QWORD); | |
// 1642A: using guessed type char var_1120[4]; | |
// 1642A: using guessed type char anonymous_0[2061]; | |
//----- (000000000001650A) ---------------------------------------------------- | |
__int64 __fastcall Conf_Remove_Section(__int64 a1, __int64 a2) | |
{ | |
return Ini_Conf_Remove_Section_Compatible(a1, a2); | |
} | |
// 9EC0: using guessed type __int64 __fastcall Ini_Conf_Remove_Section_Compatible(_QWORD, _QWORD); | |
//----- (000000000001652F) ---------------------------------------------------- | |
__int64 __fastcall Conf_Rename_Section(char *a1, const char *a2, const char *a3) | |
{ | |
struct stat64 stat_buf; // [rsp+20h] [rbp-F00h] BYREF | |
char s[1024]; // [rsp+B0h] [rbp-E70h] BYREF | |
char resolved[1024]; // [rsp+4B0h] [rbp-A70h] BYREF | |
char old[1024]; // [rsp+8B0h] [rbp-670h] BYREF | |
char templatea[32]; // [rsp+CB0h] [rbp-270h] BYREF | |
char v10[272]; // [rsp+CD0h] [rbp-250h] BYREF | |
char ptr[264]; // [rsp+DE0h] [rbp-140h] BYREF | |
FILE *v12; // [rsp+EE8h] [rbp-38h] BYREF | |
int v13; // [rsp+EF4h] [rbp-2Ch] | |
unsigned int v14; // [rsp+EF8h] [rbp-28h] | |
int fd; // [rsp+EFCh] [rbp-24h] | |
FILE *stream; // [rsp+F00h] [rbp-20h] | |
_BOOL4 v17; // [rsp+F0Ch] [rbp-14h] | |
unsigned int v18; // [rsp+F10h] [rbp-10h] | |
int v19; // [rsp+F14h] [rbp-Ch] | |
char *one_line_of_string; // [rsp+F18h] [rbp-8h] | |
v12 = 0LL; | |
stream = 0LL; | |
v19 = 0; | |
v18 = -1; | |
strcpy(templatea, "/tmp/temp.XXXXXX"); | |
v17 = sub_2D9E0(a1, &stat_buf) == 0; | |
snprintf(s, 0x400uLL, "%s.lckfile", a1); | |
if ( !(unsigned int)NAS_File_Lock(s, 1LL) ) | |
{ | |
_conf_remove_section_err(a1, a2); | |
return 4294967291LL; | |
} | |
fd = mkstemp64(templatea); | |
if ( fd < 0 ) | |
{ | |
_conf_remove_section_err(a1, a2); | |
NAS_File_Unlock(s); | |
return 4294967291LL; | |
} | |
close(fd); | |
v14 = Open_File(a1, 0, &v12); | |
if ( v14 ) | |
{ | |
unlink(templatea); | |
_conf_remove_section_err(a1, a2); | |
NAS_File_Unlock(s); | |
return v14; | |
} | |
stream = fopen64(templatea, "wb"); | |
if ( !stream ) | |
{ | |
Close_File((__int64)a1, 0LL, v12); | |
unlink(templatea); | |
_conf_remove_section_err(a1, a2); | |
NAS_File_Unlock(s); | |
return 4294967291LL; | |
} | |
if ( !v12 ) | |
goto LABEL_48; | |
v13 = 0; | |
if ( !a2 || !*a2 ) | |
v13 = 1; | |
while ( 1 ) | |
{ | |
one_line_of_string = (char *)get_one_line_of_string(v12); | |
if ( !one_line_of_string ) | |
break; | |
if ( !(unsigned int)get_section_name((__int64)one_line_of_string, ptr, 257) && !compare_string_by_flag(a2, ptr) ) | |
{ | |
sprintf(v10, "[%s]", a3); | |
one_line_of_string = v10; | |
++v19; | |
} | |
if ( fputs(one_line_of_string, stream) < 0 ) | |
{ | |
Close_File((__int64)a1, 0LL, v12); | |
if ( stream ) | |
fclose(stream); | |
goto LABEL_24; | |
} | |
fputc(10, stream); | |
} | |
Close_File((__int64)a1, 0LL, v12); | |
if ( fclose(stream) < 0 ) | |
{ | |
LABEL_24: | |
unlink(templatea); | |
_conf_remove_section_err(a1, a2); | |
NAS_File_Unlock(s); | |
return 4294967291LL; | |
} | |
if ( !v19 ) | |
{ | |
v18 = -6; | |
goto LABEL_48; | |
} | |
realpath(a1, resolved); | |
sprintf(old, "%s.bak", resolved); | |
v14 = Open_File(old, 1, &v12); | |
if ( v14 ) | |
{ | |
_conf_remove_section_err(a1, a2); | |
v18 = v14; | |
goto LABEL_48; | |
} | |
stream = fopen64(templatea, "rb"); | |
if ( !stream ) | |
{ | |
Close_File((__int64)old, 1LL, v12); | |
unlink(old); | |
unlink(templatea); | |
_conf_remove_section_err(a1, a2); | |
NAS_File_Unlock(s); | |
return 4294967291LL; | |
} | |
while ( 1 ) | |
{ | |
v14 = fread(ptr, 1uLL, 0x101uLL, stream); | |
if ( (int)v14 <= 0 ) | |
break; | |
fwrite(ptr, 1uLL, (int)v14, v12); | |
} | |
if ( (int)Close_File((__int64)old, 1LL, v12) < 0 ) | |
{ | |
unlink(old); | |
if ( stream ) | |
fclose(stream); | |
goto LABEL_24; | |
} | |
if ( rename(old, resolved) == -1 ) | |
{ | |
unlink(old); | |
v18 = -1; | |
if ( !stream ) | |
goto LABEL_48; | |
goto LABEL_45; | |
} | |
if ( v17 && chmod(resolved, stat_buf.st_mode) == -1 ) | |
{ | |
v18 = -1; | |
if ( !stream ) | |
goto LABEL_48; | |
goto LABEL_45; | |
} | |
v18 = 0; | |
if ( stream ) | |
LABEL_45: | |
fclose(stream); | |
LABEL_48: | |
unlink(templatea); | |
NAS_File_Unlock(s); | |
return v18; | |
} | |
// 9CE0: using guessed type __int64 __fastcall NAS_File_Lock(_QWORD, _QWORD); | |
// 9D20: using guessed type __int64 __fastcall NAS_File_Unlock(_QWORD); | |
// AC40: using guessed type __int64 __fastcall get_one_line_of_string(_QWORD); | |
//----- (0000000000016BC4) ---------------------------------------------------- | |
__int64 __fastcall conf_remove_field_err(const char *a1, const char *a2, const char *a3) | |
{ | |
__int64 result; // rax | |
char v5[4]; // [rsp+20h] [rbp-1120h] BYREF | |
int v6; // [rsp+24h] [rbp-111Ch] | |
char v7; // [rsp+60h] [rbp-10E0h] | |
char v8; // [rsp+A1h] [rbp-109Fh] | |
char v9; // [rsp+E2h] [rbp-105Eh] | |
char v10[2061]; // [rsp+123h] [rbp-101Dh] BYREF | |
char s[2056]; // [rsp+930h] [rbp-810h] BYREF | |
char *v12; // [rsp+1138h] [rbp-8h] | |
result = _is_ram_almost_full(); | |
if ( (_DWORD)result ) | |
{ | |
v12 = message01; | |
snprintf(s, 0x800uLL, "%s (file = [%s], section = [%s], field = [%s]) %s", message00, a1, a2, a3, message01); | |
v6 = 2; | |
v8 = 0; | |
v7 = 0; | |
v9 = 0; | |
strncpy(v10, s, 0x800uLL); | |
return naslog_event_add(v5); | |
} | |
return result; | |
} | |
// A020: using guessed type __int64 __fastcall naslog_event_add(_QWORD); | |
// 16BC4: using guessed type char var_1120[4]; | |
// 16BC4: using guessed type char anonymous_0[2061]; | |
//----- (0000000000016CAD) ---------------------------------------------------- | |
__int64 __fastcall Conf_Remove_Field(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
return Ini_Conf_Remove_Field_Compatible(a1, a2, a3); | |
} | |
// AA30: using guessed type __int64 __fastcall Ini_Conf_Remove_Field_Compatible(_QWORD, _QWORD, _QWORD); | |
//----- (0000000000016CDA) ---------------------------------------------------- | |
__int64 __fastcall conf_set_field_err(const char *a1, const char *a2, const char *a3, const char *a4) | |
{ | |
__int64 result; // rax | |
char v7[4]; // [rsp+20h] [rbp-1120h] BYREF | |
int v8; // [rsp+24h] [rbp-111Ch] | |
char v9; // [rsp+60h] [rbp-10E0h] | |
char v10; // [rsp+A1h] [rbp-109Fh] | |
char v11; // [rsp+E2h] [rbp-105Eh] | |
char v12[2061]; // [rsp+123h] [rbp-101Dh] BYREF | |
char s[2056]; // [rsp+930h] [rbp-810h] BYREF | |
char *v14; // [rsp+1138h] [rbp-8h] | |
result = _is_ram_almost_full(); | |
if ( (_DWORD)result ) | |
{ | |
v14 = message01; | |
snprintf( | |
s, | |
0x800uLL, | |
"%s (file = [%s], section = [%s], field = [%s], value = [%s]) %s", | |
message00, | |
a1, | |
a2, | |
a3, | |
a4, | |
message01); | |
v8 = 2; | |
v10 = 0; | |
v9 = 0; | |
v11 = 0; | |
strncpy(v12, s, 0x800uLL); | |
return naslog_event_add(v7); | |
} | |
return result; | |
} | |
// A020: using guessed type __int64 __fastcall naslog_event_add(_QWORD); | |
// 16CDA: using guessed type char var_1120[4]; | |
// 16CDA: using guessed type char anonymous_0[2061]; | |
//----- (0000000000016DD4) ---------------------------------------------------- | |
__int64 __fastcall Conf_Set_Field(__int64 a1, __int64 a2, __int64 a3, __int64 a4) | |
{ | |
return Ini_Conf_Set_Field_Compatible(a1, a2, a3, a4); | |
} | |
// A850: using guessed type __int64 __fastcall Ini_Conf_Set_Field_Compatible(_QWORD, _QWORD, _QWORD, _QWORD); | |
//----- (0000000000016E06) ---------------------------------------------------- | |
size_t __fastcall GetPrivateProfileString(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5, __int64 a6) | |
{ | |
if ( (unsigned int)Conf_Get_Field(a6, a1, a2, (__int64)a4, a5) == -6 ) | |
{ | |
if ( strlen(a3) >= a5 ) | |
{ | |
strncpy(a4, a3, a5 - 1); | |
a3[a5] = 0; | |
} | |
else | |
{ | |
strncpy(a4, a3, a5); | |
} | |
} | |
return strlen(a4); | |
} | |
//----- (0000000000016EBB) ---------------------------------------------------- | |
size_t __fastcall GetPrivateProfileStringNoLock( | |
const char *a1, | |
const char *a2, | |
const char *a3, | |
char *a4, | |
int a5, | |
const char *a6) | |
{ | |
if ( (unsigned int)Conf_Get_Field_NoLock(a6, a1, a2, a4, a5) == -6 ) | |
{ | |
if ( strlen(a3) >= a5 ) | |
{ | |
strncpy(a4, a3, a5 - 1); | |
a3[a5] = 0; | |
} | |
else | |
{ | |
strncpy(a4, a3, a5); | |
} | |
} | |
return strlen(a4); | |
} | |
//----- (0000000000016F70) ---------------------------------------------------- | |
_BOOL8 __fastcall WritePrivateProfileString(__int64 a1, __int64 a2, __int64 a3, __int64 a4) | |
{ | |
return (unsigned int)Conf_Set_Field(a4, a1, a2, a3) == 0; | |
} | |
//----- (0000000000016FB2) ---------------------------------------------------- | |
size_t __fastcall GetProfileString(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5) | |
{ | |
return GetPrivateProfileString(a1, a2, a3, a4, a5, (__int64)"/etc/config/uLinux.conf"); | |
} | |
//----- (0000000000016FF5) ---------------------------------------------------- | |
_BOOL8 __fastcall WriteProfileString(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
return WritePrivateProfileString(a1, a2, a3, (__int64)"/etc/config/uLinux.conf"); | |
} | |
//----- (0000000000017026) ---------------------------------------------------- | |
size_t __fastcall GetProfileStringServiceBinding(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5) | |
{ | |
return GetPrivateProfileString(a1, a2, a3, a4, a5, (__int64)"/etc/config/service_binding.conf"); | |
} | |
//----- (0000000000017069) ---------------------------------------------------- | |
_BOOL8 __fastcall WriteProfileStringServiceBinding(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
return WritePrivateProfileString(a1, a2, a3, (__int64)"/etc/config/service_binding.conf"); | |
} | |
//----- (000000000001709A) ---------------------------------------------------- | |
size_t __fastcall GetProfileStringNetLinks(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5) | |
{ | |
return GetPrivateProfileString(a1, a2, a3, a4, a5, (__int64)"/etc/config/NetLinks.conf"); | |
} | |
//----- (00000000000170DD) ---------------------------------------------------- | |
_BOOL8 __fastcall WriteProfileStringNetLinks(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
return WritePrivateProfileString(a1, a2, a3, (__int64)"/etc/config/NetLinks.conf"); | |
} | |
//----- (000000000001710E) ---------------------------------------------------- | |
size_t __fastcall Get_Profile_String(__int64 a1, __int64 a2, const char *a3, char *a4, signed int a5) | |
{ | |
return GetProfileString(a1, a2, a3, a4, a5); | |
} | |
//----- (000000000001714A) ---------------------------------------------------- | |
_BOOL8 __fastcall Set_Profile_String(__int64 a1, __int64 a2, __int64 a3) | |
{ | |
return WriteProfileString(a1, a2, a3); | |
} | |
//----- (0000000000017177) ---------------------------------------------------- | |
_BOOL8 __fastcall Get_Profile_Boolean(__int64 a1, __int64 a2, int a3) | |
{ | |
const char *v3; // rax | |
bool v4; // bl | |
int v5; // ebx | |
char s1[144]; // [rsp+20h] [rbp-90h] BYREF | |
if ( a3 ) | |
v3 = "TRUE"; | |
else | |
v3 = "FALSE"; | |
Get_Profile_String(a1, a2, v3, s1, 128); | |
v4 = strcasecmp(s1, "TRUE") == 0; | |
v5 = v4 | (strcasecmp(s1, "YES") == 0); | |
return (v5 | (atoi(s1) != 0)) != 0; | |
} | |
//----- (0000000000017244) ---------------------------------------------------- | |
_BOOL8 __fastcall Set_Profile_Boolean(__int64 a1, __int64 a2, int a3) | |
{ | |
const char *v3; // rax | |
if ( a3 ) | |
v3 = "TRUE"; | |
else | |
v3 = "FALSE"; | |
return Set_Profile_String(a1, a2, (__int64)v3); | |
} | |
//----- (0000000000017282) ---------------------------------------------------- | |
int __fastcall Get_Profile_Integer(__int64 a1, __int64 a2, unsigned int a3) | |
{ | |
char nptr[128]; // [rsp+20h] [rbp-C0h] BYREF | |
char s[64]; // [rsp+A0h] [rbp-40h] BYREF | |
sprintf(s, "%d", a3); | |
Get_Profile_String(a1, a2, s, nptr, 128); | |
return atoi(nptr); | |
} | |
//----- (00000000000172F7) ---------------------------------------------------- | |
_BOOL8 __fastcall Set_Profile_Integer(__int64 a1, __int64 a2, unsigned int a3) | |
{ | |
char s[64]; // [rsp+20h] [rbp-40h] BYREF | |
sprintf(s, "%d", a3); | |
return Set_Profile_String(a1, a2, (__int64)s); | |
} | |
//----- (000000000001733E) ---------------------------------------------------- | |
size_t __fastcall Get_Private_Profile_String( | |
__int64 a1, | |
__int64 a2, | |
const char *a3, | |
char *a4, | |
signed int a5, | |
__int64 a6) | |
{ | |
return GetPrivateProfileString(a1, a2, a3, a4, a5, a6); | |
} | |
//----- (0000000000017385) ---------------------------------------------------- | |
_BOOL8 __fastcall Set_Private_Profile_String(__int64 a1, __int64 a2, __int64 a3, __int64 a4) | |
{ | |
return WritePrivateProfileString(a1, a2, a3, a4); | |
} | |
//----- (00000000000173B7) ---------------------------------------------------- | |
_BOOL8 __fastcall Get_Private_Profile_Boolean(__int64 a1, __int64 a2, int a3, __int64 a4) | |
{ | |
const char *v4; // rax | |
bool v5; // bl | |
int v6; // ebx | |
char s1[144]; // [rsp+20h] [rbp-90h] BYREF | |
if ( a3 ) | |
v4 = "TRUE"; | |
else | |
v4 = "FALSE"; | |
Get_Private_Profile_String(a1, a2, v4, s1, 128, a4); | |
v5 = strcasecmp(s1, "TRUE") == 0; | |
v6 = v5 | (strcasecmp(s1, "YES") == 0); | |
return (v6 | (atoi(s1) != 0)) != 0; | |
} | |
//----- (0000000000017495) ---------------------------------------------------- | |
_BOOL8 __fastcall Set_Private_Profile_Boolean(__int64 a1, __int64 a2, int a3, __int64 a4) | |
{ | |
const char *v4; // rax | |
if ( a3 ) | |
v4 = "TRUE"; | |
else | |
v4 = "FALSE"; | |
return Set_Private_Profile_String(a1, a2, (__int64)v4, a4); | |
} | |
//----- (00000000000174DB) ---------------------------------------------------- | |
int __fastcall Get_Private_Profile_Integer(__int64 a1, __int64 a2, unsigned int a3, __int64 a4) | |
{ | |
char nptr[128]; // [rsp+20h] [rbp-C0h] BYREF | |
char s[64]; // [rsp+A0h] [rbp-40h] BYREF | |
sprintf(s, "%d", a3); | |
Get_Private_Profile_String(a1, a2, s, nptr, 128, a4); | |
return atoi(nptr); | |
} | |
//----- (0000000000017561) ---------------------------------------------------- | |
int __fastcall Get_Private_Profile_Integer_NoLock(const char *a1, const char *a2, unsigned int a3, const char *a4) | |
{ | |
char nptr[128]; // [rsp+20h] [rbp-C0h] BYREF | |
char s[64]; // [rsp+A0h] [rbp-40h] BYREF | |
sprintf(s, "%d", a3); | |
GetPrivateProfileStringNoLock(a1, a2, s, nptr, 128, a4); | |
return atoi(nptr); | |
} | |
//----- (00000000000175E7) ---------------------------------------------------- | |
_BOOL8 __fastcall Set_Private_Profile_Integer(__int64 a1, __int64 a2, unsigned int a3, __int64 a4) | |
{ | |
char s[64]; // [rsp+20h] [rbp-40h] BYREF | |
sprintf(s, "%d", a3); | |
return Set_Private_Profile_String(a1, a2, (__int64)s, a4); | |
} | |
//----- (0000000000017633) ---------------------------------------------------- | |
_BOOL8 __fastcall Set_Private_Profile_Long(__int64 a1, __int64 a2, __int64 a3, __int64 a4) | |
{ | |
char s[64]; // [rsp+20h] [rbp-40h] BYREF | |
sprintf(s, "%ld", a3); | |
return Set_Private_Profile_String(a1, a2, (__int64)s, a4); | |
} | |
//----- (0000000000017681) ---------------------------------------------------- | |
_BOOL8 __fastcall Set_Private_Profile_Longlong(__int64 a1, __int64 a2, __int64 a3, __int64 a4) | |
{ | |
char s[64]; // [rsp+20h] [rbp-40h] BYREF | |
sprintf(s, "%lld", a3); | |
return Set_Private_Profile_String(a1, a2, (__int64)s, a4); | |
} | |
//----- (00000000000176CF) ---------------------------------------------------- | |
char *__fastcall File_Fgets(FILE *a1) | |
{ | |
int v2; // [rsp+10h] [rbp-10h] | |
int v3; // [rsp+14h] [rbp-Ch] | |
char *ptr; // [rsp+18h] [rbp-8h] | |
v3 = 0; | |
v2 = 0; | |
ptr = (char *)calloc(1uLL, 0x400uLL); | |
if ( !ptr ) | |
return 0LL; | |
while ( 1 ) | |
{ | |
fgets(&ptr[v3 - (__int64)v2], 1024, a1); | |
if ( feof(a1) ) | |
{ | |
free(ptr); | |
return 0LL; | |
} | |
if ( ptr[strlen(ptr) - 1] == 10 ) | |
return ptr; | |
v3 += 1024; | |
++v2; | |
ptr = (char *)realloc(ptr, v3 + 1024); | |
if ( !ptr ) | |
break; | |
memset(&ptr[v3], 0, 0x400uLL); | |
} | |
return 0LL; | |
} | |
//----- (00000000000177DF) ---------------------------------------------------- | |
__int64 __fastcall Comp_Config_Disk_SN(const char *a1, const char *a2) | |
{ | |
size_t v2; // rbx | |
int v3; // eax | |
size_t v4; // rbx | |
int v6; // eax | |
size_t v7; // rbx | |
size_t v8; // rbx | |
size_t v9; // rbx | |
int v10; // eax | |
int v11; // eax | |
size_t v12; // rbx | |
size_t v13; // rbx | |
size_t v14; // rbx | |
int v15; // eax | |
char *s2; // [rsp+0h] [rbp-140h] | |
char *s; // [rsp+8h] [rbp-138h] | |
char dest[264]; // [rsp+10h] [rbp-130h] BYREF | |
char *v19; // [rsp+118h] [rbp-28h] | |
char v20; // [rsp+127h] [rbp-19h] | |
int v21; // [rsp+128h] [rbp-18h] | |
int i; // [rsp+12Ch] [rbp-14h] | |
s = (char *)Skip_White_Space_Ex(a1); | |
s2 = (char *)Skip_White_Space_Ex(a2); | |
v2 = strlen(s); | |
if ( v2 <= strlen(s2) ) | |
v3 = strlen(s); | |
else | |
v3 = strlen(s2); | |
v21 = v3; | |
if ( !v3 ) | |
{ | |
v4 = strlen(s); | |
if ( v4 != strlen(s2) ) | |
return 0xFFFFFFFFLL; | |
} | |
if ( !strncmp(s, s2, v21) ) | |
return 0LL; | |
strcpy(dest, s2); | |
for ( i = 0; ; dest[i++] = v20 ) | |
{ | |
v8 = i; | |
if ( v8 >= strlen(s2) ) | |
break; | |
v6 = i++; | |
v20 = dest[v6]; | |
v7 = i; | |
if ( v7 >= strlen(s2) ) | |
break; | |
dest[i - 1] = dest[i]; | |
} | |
v19 = (char *)Skip_White_Space_Ex(dest); | |
v9 = strlen(s); | |
v10 = v9 <= strlen(v19) ? strlen(s) : strlen(v19); | |
v21 = v10; | |
if ( !strncmp(s, v19, v10) ) | |
return 0LL; | |
strcpy(dest, s); | |
for ( i = 0; ; dest[i++] = v20 ) | |
{ | |
v13 = i; | |
if ( v13 >= strlen(s) ) | |
break; | |
v11 = i++; | |
v20 = dest[v11]; | |
v12 = i; | |
if ( v12 >= strlen(s) ) | |
break; | |
dest[i - 1] = dest[i]; | |
} | |
v19 = (char *)Skip_White_Space_Ex(dest); | |
v14 = strlen(s2); | |
v15 = v14 <= strlen(v19) ? strlen(s2) : strlen(v19); | |
v21 = v15; | |
if ( !strncmp(s2, v19, v15) ) | |
return 0LL; | |
return 0xFFFFFFFFLL; | |
} | |
// 177DF: using guessed type char dest[264]; | |
//----- (0000000000017B0F) ---------------------------------------------------- | |
__int64 __fastcall Conf_Dir_Wirte_Section_To_File(__int64 a1, const char *a2, char *a3) | |
{ | |
const char *v4; // rax | |
struct stat64 stat_buf; // [rsp+20h] [rbp-DE0h] BYREF | |
char ptr[272]; // [rsp+B0h] [rbp-D50h] BYREF | |
char filename[1024]; // [rsp+1C0h] [rbp-C40h] BYREF | |
char s[1024]; // [rsp+5C0h] [rbp-840h] BYREF | |
char resolved[1024]; // [rsp+9C0h] [rbp-440h] BYREF | |
char templatea[24]; // [rsp+DC0h] [rbp-40h] BYREF | |
int fd; // [rsp+DD8h] [rbp-28h] | |
unsigned int v13; // [rsp+DDCh] [rbp-24h] | |
_BOOL4 v14; // [rsp+DE0h] [rbp-20h] | |
unsigned int v15; // [rsp+DE4h] [rbp-1Ch] | |
FILE *v16; // [rsp+DE8h] [rbp-18h] | |
FILE *stream; // [rsp+DF0h] [rbp-10h] | |
int j; // [rsp+DF8h] [rbp-8h] | |
int i; // [rsp+DFCh] [rbp-4h] | |
stream = 0LL; | |
v16 = 0LL; | |
strcpy(templatea, "/tmp/temp.XXXXXX"); | |
v15 = -5; | |
v14 = 0; | |
if ( !a1 || !a2 || !a3 ) | |
return 4294967294LL; | |
v14 = sub_2D9E0(a3, &stat_buf) == 0; | |
snprintf(s, 0x400uLL, "%s.lckfile", a3); | |
v13 = Ini_Conf_Write_Lock_File_Timeout(s, 300LL); | |
if ( v13 == -1 ) | |
return v15; | |
fd = mkstemp64(templatea); | |
if ( fd >= 0 ) | |
{ | |
close(fd); | |
stream = fopen64(templatea, "wb"); | |
if ( stream ) | |
{ | |
for ( i = 0; *(_DWORD *)(a1 + 1032) > i; ++i ) | |
{ | |
if ( *(_QWORD *)(8LL * i + *(_QWORD *)(a1 + 1048)) | |
&& !strcasecmp(a2, *(const char **)(8LL * i + *(_QWORD *)(a1 + 1048))) ) | |
{ | |
fprintf(stream, "\n[%s]\n", *(const char **)(8LL * i + *(_QWORD *)(a1 + 1048))); | |
for ( j = 0; *(_DWORD *)(a1 + 1028) > j; ++j ) | |
{ | |
if ( *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1056)) | |
&& *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1072)) | |
&& !strcasecmp( | |
*(const char **)(8LL * j + *(_QWORD *)(a1 + 1056)), | |
*(const char **)(8LL * i + *(_QWORD *)(a1 + 1048))) ) | |
{ | |
if ( *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1064)) ) | |
v4 = *(const char **)(8LL * j + *(_QWORD *)(a1 + 1064)); | |
else | |
v4 = (const char *)&unk_2E32E; | |
fprintf(stream, "%s = %s\n", *(const char **)(8LL * j + *(_QWORD *)(a1 + 1072)), v4); | |
} | |
} | |
} | |
} | |
fputc(10, stream); | |
if ( fflush(stream) >= 0 || *__errno_location() != 28 && *__errno_location() != 5 ) | |
{ | |
fclose(stream); | |
realpath(a3, resolved); | |
sprintf(filename, "%s.bak", resolved); | |
stream = fopen64(templatea, "rb"); | |
v16 = fopen64(filename, "wb"); | |
if ( stream ) | |
{ | |
if ( v16 ) | |
{ | |
while ( 1 ) | |
{ | |
i = fread(ptr, 1uLL, 0x101uLL, stream); | |
if ( i <= 0 ) | |
break; | |
fwrite(ptr, 1uLL, i, v16); | |
} | |
if ( (fflush(v16) >= 0 || *__errno_location() != 28 && *__errno_location() != 5) | |
&& rename(filename, resolved) >= 0 | |
&& (!v14 || chmod(resolved, stat_buf.st_mode) != -1) ) | |
{ | |
v15 = 0; | |
} | |
} | |
} | |
} | |
} | |
} | |
Ini_Conf_Unlock_File(v13); | |
unlink(templatea); | |
if ( stream ) | |
fclose(stream); | |
if ( v16 ) | |
fclose(v16); | |
return v15; | |
} | |
// 9D00: using guessed type __int64 __fastcall Ini_Conf_Write_Lock_File_Timeout(_QWORD, _QWORD); | |
// A3E0: using guessed type __int64 __fastcall Ini_Conf_Unlock_File(_QWORD); | |
//----- (0000000000018016) ---------------------------------------------------- | |
__int64 __fastcall conf_get_field(const char *a1, const char *a2, const char *a3, char *a4, int a5) | |
{ | |
int char_in_string; // eax | |
char v10[8]; // [rsp+30h] [rbp-230h] BYREF | |
char v11[120]; // [rsp+38h] [rbp-228h] BYREF | |
char v12[272]; // [rsp+B0h] [rbp-1B0h] BYREF | |
char s1[8]; // [rsp+1C0h] [rbp-A0h] BYREF | |
char v14[120]; // [rsp+1C8h] [rbp-98h] BYREF | |
FILE *stream; // [rsp+240h] [rbp-20h] BYREF | |
int v16; // [rsp+24Ch] [rbp-14h] | |
char *s; // [rsp+250h] [rbp-10h] | |
unsigned int v18; // [rsp+258h] [rbp-8h] | |
_BOOL4 v19; // [rsp+25Ch] [rbp-4h] | |
stream = 0LL; | |
*(_QWORD *)s1 = 0LL; | |
memset(v14, 0, sizeof(v14)); | |
v19 = 0; | |
v18 = 0; | |
v18 = Open_File(a1, 0, &stream); | |
if ( v18 ) | |
return v18; | |
rewind(stream); | |
if ( !a2 || !*a2 ) | |
v19 = 1; | |
while ( 1 ) | |
{ | |
while ( 1 ) | |
{ | |
if ( !fgets(v12, 257, stream) ) | |
{ | |
LABEL_21: | |
Close_File((__int64)a1, 0LL, stream); | |
return 4294967290LL; | |
} | |
s = (char *)skip_white_space(v12); | |
if ( *s != 91 ) | |
break; | |
if ( get_string_until_ch((__int64)(s + 1), 93, s1, 128) ) | |
{ | |
if ( v19 ) | |
goto LABEL_21; | |
v19 = strcasecmp(s1, a2) == 0; | |
} | |
} | |
if ( v19 && !is_commented_string((__int64)s) ) | |
{ | |
*(_QWORD *)v10 = 0LL; | |
memset(v11, 0, sizeof(v11)); | |
if ( get_string_until_ch((__int64)s, 61, v10, 128) ) | |
{ | |
if ( !strcasecmp(a3, v10) ) | |
break; | |
} | |
} | |
} | |
char_in_string = find_char_in_string((__int64)s, 61); | |
s += char_in_string + 1; | |
s = (char *)skip_white_space(s); | |
if ( a4 ) | |
{ | |
*a4 = 0; | |
v16 = strlen(s); | |
if ( v16 + 1 <= a5 ) | |
{ | |
strncpy(a4, s, v16); | |
a4[v16] = 0; | |
stripe_white_space_tail(a4); | |
Close_File((__int64)a1, 0LL, stream); | |
return 0LL; | |
} | |
else | |
{ | |
v16 = a5 - 1; | |
strncpy(a4, s, a5 - 1); | |
a4[v16] = 0; | |
stripe_white_space_tail(a4); | |
Close_File((__int64)a1, 0LL, stream); | |
return 4294967287LL; | |
} | |
} | |
else | |
{ | |
Close_File((__int64)a1, 0LL, stream); | |
return (unsigned int)strlen(s) + 1; | |
} | |
} | |
// A2C0: using guessed type __int64 __fastcall stripe_white_space_tail(_QWORD); | |
// A6B0: using guessed type __int64 __fastcall skip_white_space(_QWORD); | |
//----- (0000000000018370) ---------------------------------------------------- | |
__int64 __fastcall is_black_str(__int64 a1) | |
{ | |
int v1; // eax | |
int v3; // [rsp+14h] [rbp-4h] | |
v3 = 0; | |
while ( *(_BYTE *)(v3 + a1) ) | |
{ | |
v1 = v3++; | |
if ( *(_BYTE *)(v1 + a1) != 32 ) | |
return 0LL; | |
} | |
return 1LL; | |
} | |
//----- (00000000000183BD) ---------------------------------------------------- | |
_BOOL8 __fastcall is_tc_word(_BYTE *a1) | |
{ | |
return *a1 > 0xA0u && *a1 != 0xFF && (a1[1] > 0x3Fu && a1[1] <= 0x7Eu || a1[1] > 0xA0u && a1[1] != 0xFF); | |
} | |
//----- (000000000001842D) ---------------------------------------------------- | |
_BOOL8 __fastcall is_sc_word(_BYTE *a1) | |
{ | |
return *a1 > 0xA0u && *a1 <= 0xF7u && a1[1] > 0xA0u && a1[1] != 0xFF; | |
} | |
//----- (000000000001847F) ---------------------------------------------------- | |
_BOOL8 __fastcall is_jis_word(_BYTE *a1) | |
{ | |
return (*a1 > 0x80u && *a1 <= 0x9Fu || *a1 > 0xDFu && *a1 <= 0xEFu) | |
&& (a1[1] > 0x3Fu && a1[1] <= 0x7Eu || (char)a1[1] <= -4); | |
} | |
//----- (0000000000018505) ---------------------------------------------------- | |
_BOOL8 __fastcall is_korea_word(_BYTE *a1) | |
{ | |
return *a1 > 0xA0u && *a1 != 0xFF && (char)a1[1] < 0; | |
} | |
//----- (0000000000018548) ---------------------------------------------------- | |
__int64 __fastcall Is_Mb_Word(_BYTE *a1) | |
{ | |
int System_Codepage; // eax | |
System_Codepage = Get_System_Codepage(); | |
if ( System_Codepage == 936 ) | |
{ | |
if ( is_sc_word(a1) ) | |
return 1LL; | |
} | |
else if ( System_Codepage > 936 ) | |
{ | |
if ( System_Codepage == 949 ) | |
{ | |
if ( is_korea_word(a1) ) | |
return 1LL; | |
} | |
else if ( System_Codepage == 950 && is_tc_word(a1) ) | |
{ | |
return 1LL; | |
} | |
} | |
else if ( System_Codepage == 932 && is_jis_word(a1) ) | |
{ | |
return 1LL; | |
} | |
return 0LL; | |
} | |
// A770: using guessed type __int64 Get_System_Codepage(void); | |
//----- (00000000000185F0) ---------------------------------------------------- | |
__int64 __fastcall Is_Mb_String(_BYTE *a1) | |
{ | |
_BYTE *v2; // [rsp+18h] [rbp-8h] | |
v2 = a1; | |
if ( a1 ) | |
{ | |
while ( *v2 ) | |
{ | |
if ( (unsigned int)Is_Mb_Word(v2) ) | |
return 1LL; | |
++v2; | |
} | |
} | |
return 0LL; | |
} | |
//----- (000000000001863B) ---------------------------------------------------- | |
__int64 __fastcall Is_Mb_Word_By_Codepage(_BYTE *a1, int a2) | |
{ | |
if ( a2 == 936 ) | |
{ | |
if ( is_sc_word(a1) ) | |
return 1LL; | |
} | |
else if ( a2 > 936 ) | |
{ | |
if ( a2 == 949 ) | |
{ | |
if ( is_korea_word(a1) ) | |
return 1LL; | |
} | |
else if ( a2 == 950 && is_tc_word(a1) ) | |
{ | |
return 1LL; | |
} | |
} | |
else if ( a2 == 932 && is_jis_word(a1) ) | |
{ | |
return 1LL; | |
} | |
return 0LL; | |
} | |
//----- (00000000000186DE) ---------------------------------------------------- | |
__int64 __fastcall sub_186DE(_BYTE *a1, const char *a2) | |
{ | |
_BYTE *v3; // [rsp+18h] [rbp-8h] | |
if ( a1 ) | |
{ | |
if ( !*a1 || (unsigned int)is_black_str((__int64)a1) ) | |
return 0LL; | |
if ( a2 ) | |
{ | |
v3 = a1; | |
while ( *v3 ) | |
{ | |
if ( (unsigned int)Is_Mb_Word(v3) ) | |
{ | |
v3 += 2; | |
} | |
else | |
{ | |
if ( strchr(a2, (char)*v3) ) | |
return 0LL; | |
++v3; | |
} | |
} | |
} | |
} | |
return 1LL; | |
} | |
//----- (000000000001877A) ---------------------------------------------------- | |
__int64 __fastcall Is_Legal_String(_BYTE *a1) | |
{ | |
return sub_186DE(a1, "\"/\\+=:|*?<>[];,%`{}$ '\n\r"); | |
} | |
//----- (000000000001879B) ---------------------------------------------------- | |
__int64 __fastcall Is_Share_Legal_String(_BYTE *a1) | |
{ | |
return sub_186DE(a1, "\"/\\+=:|*?<>[];,%`'"); | |
} | |
//----- (00000000000187BC) ---------------------------------------------------- | |
__int64 __fastcall Is_Share_Path_Legal_String(_BYTE *a1) | |
{ | |
return sub_186DE(a1, "\"\\:|*?<>;`',"); | |
} | |
//----- (00000000000187DD) ---------------------------------------------------- | |
__int64 __fastcall Is_No_LineBreaks_String(_BYTE *a1) | |
{ | |
return sub_186DE(a1, "\n\r"); | |
} | |
//----- (00000000000187FE) ---------------------------------------------------- | |
__int64 __fastcall mb_strcmp(char *a1, char *a2) | |
{ | |
char *s2; // [rsp+0h] [rbp-30h] | |
char *s; // [rsp+8h] [rbp-28h] | |
int System_Codepage; // [rsp+18h] [rbp-18h] | |
int v6; // [rsp+1Ch] [rbp-14h] | |
int v7; // [rsp+20h] [rbp-10h] | |
int v8; // [rsp+24h] [rbp-Ch] | |
int v9; // [rsp+28h] [rbp-8h] | |
int i; // [rsp+2Ch] [rbp-4h] | |
s = a1; | |
s2 = a2; | |
if ( !a1 || !a2 ) | |
return 0xFFFFFFFFLL; | |
v7 = strlen(a1); | |
v6 = strlen(a2); | |
if ( v7 != v6 ) | |
return (unsigned int)(v7 - v6); | |
System_Codepage = Get_System_Codepage(); | |
Is_Mb_Word_By_Codepage(a1, System_Codepage); | |
Is_Mb_Word_By_Codepage(a2, System_Codepage); | |
for ( i = 0; i < v7; i += v9 ) | |
{ | |
v8 = Is_Mb_Word_By_Codepage(s, System_Codepage) != 0; | |
if ( (unsigned int)Is_Mb_Word_By_Codepage(s2, System_Codepage) ) | |
v8 |= 2u; | |
v9 = 1; | |
if ( v8 > 2 ) | |
{ | |
if ( v8 == 3 ) | |
{ | |
v9 = 2; | |
if ( strncmp(s, s2, 2uLL) ) | |
return 1LL; | |
} | |
} | |
else | |
{ | |
if ( v8 >= 1 ) | |
return 1LL; | |
if ( !v8 && strncmp(s, s2, 1uLL) ) | |
return 1LL; | |
} | |
s += v9; | |
s2 += v9; | |
} | |
return 0LL; | |
} | |
// A770: using guessed type __int64 Get_System_Codepage(void); | |
//----- (000000000001898F) ---------------------------------------------------- | |
__int64 __fastcall mb_strcasecmp(const char *a1, const char *a2) | |
{ | |
char *s2; // [rsp+0h] [rbp-30h] | |
char *s; // [rsp+8h] [rbp-28h] | |
int System_Codepage; // [rsp+18h] [rbp-18h] | |
int v6; // [rsp+1Ch] [rbp-14h] | |
int v7; // [rsp+20h] [rbp-10h] | |
int v8; // [rsp+24h] [rbp-Ch] | |
int v9; // [rsp+28h] [rbp-8h] | |
int i; // [rsp+2Ch] [rbp-4h] | |
s = (char *)a1; | |
s2 = (char *)a2; | |
if ( !a1 || !a2 ) | |
return 0xFFFFFFFFLL; | |
v7 = strlen(a1); | |
v6 = strlen(a2); | |
if ( v7 != v6 ) | |
return (unsigned int)(v7 - v6); | |
System_Codepage = Get_System_Codepage(); | |
for ( i = 0; i < v7; i += v9 ) | |
{ | |
v8 = Is_Mb_Word_By_Codepage(s, System_Codepage) != 0; | |
if ( (unsigned int)Is_Mb_Word_By_Codepage(s2, System_Codepage) ) | |
v8 |= 2u; | |
v9 = 1; | |
if ( v8 > 2 ) | |
{ | |
if ( v8 == 3 ) | |
{ | |
v9 = 2; | |
if ( strncmp(s, s2, 2uLL) ) | |
return 1LL; | |
} | |
} | |
else | |
{ | |
if ( v8 >= 1 ) | |
return 1LL; | |
if ( !v8 && strncasecmp(s, s2, 1uLL) ) | |
return 1LL; | |
} | |
s += v9; | |
s2 += v9; | |
} | |
return 0LL; | |
} | |
// A770: using guessed type __int64 Get_System_Codepage(void); | |
//----- (0000000000018AEE) ---------------------------------------------------- | |
__int64 __fastcall mb_strcmp_ex(char *a1, char *a2, int a3) | |
{ | |
char *s2; // [rsp+10h] [rbp-30h] | |
char *s; // [rsp+18h] [rbp-28h] | |
int v7; // [rsp+2Ch] [rbp-14h] | |
int v8; // [rsp+30h] [rbp-10h] | |
int v9; // [rsp+34h] [rbp-Ch] | |
int v10; // [rsp+38h] [rbp-8h] | |
int i; // [rsp+3Ch] [rbp-4h] | |
s = a1; | |
s2 = a2; | |
if ( !a1 || !a2 ) | |
return 0xFFFFFFFFLL; | |
v8 = strlen(a1); | |
v7 = strlen(a2); | |
if ( v8 != v7 ) | |
return (unsigned int)(v8 - v7); | |
v9 = Is_Mb_Word_By_Codepage(a1, a3) != 0; | |
if ( (unsigned int)Is_Mb_Word_By_Codepage(a2, a3) ) | |
v9 |= 2u; | |
for ( i = 0; i < v8; i += v10 ) | |
{ | |
v10 = 1; | |
if ( v9 > 2 ) | |
{ | |
if ( v9 == 3 ) | |
{ | |
v10 = 2; | |
if ( strncmp(s, s2, 2uLL) ) | |
return 1LL; | |
} | |
} | |
else | |
{ | |
if ( v9 >= 1 ) | |
return 1LL; | |
if ( !v9 && strncmp(s, s2, 1uLL) ) | |
return 1LL; | |
} | |
s += v10; | |
s2 += v10; | |
} | |
return 0LL; | |
} | |
//----- (0000000000018C41) ---------------------------------------------------- | |
void err_lock() | |
{ | |
; | |
} | |
//----- (0000000000018C4B) ---------------------------------------------------- | |
const char *__fastcall get_filename(const char *a1) | |
{ | |
char *v2; // [rsp+18h] [rbp-8h] | |
v2 = strrchr(a1, 47); | |
if ( v2 ) | |
return v2 + 1; | |
else | |
return a1; | |
} | |
//----- (0000000000018C83) ---------------------------------------------------- | |
_BOOL8 __fastcall timeout(int a1) | |
{ | |
return (int)(time(0LL) - a1) > 5; | |
} | |
//----- (0000000000018CB4) ---------------------------------------------------- | |
__int64 __fastcall NAS_File_Lock(const char *a1, char a2) | |
{ | |
int v2; // eax | |
struct stat64 stat_buf; // [rsp+10h] [rbp-1C0h] BYREF | |
__pid_t buf; // [rsp+A0h] [rbp-130h] BYREF | |
char v6; // [rsp+A4h] [rbp-12Ch] | |
int v7; // [rsp+A8h] [rbp-128h] | |
char s[264]; // [rsp+B0h] [rbp-120h] BYREF | |
time_t v9; // [rsp+1B8h] [rbp-18h] | |
const char *filename; // [rsp+1C0h] [rbp-10h] | |
int v11; // [rsp+1C8h] [rbp-8h] | |
int fd; // [rsp+1CCh] [rbp-4h] | |
v11 = 100; | |
filename = get_filename(a1); | |
sprintf(s, "%s/%s.lck", "/var/lock/NAS", filename); | |
while ( v11 ) | |
{ | |
fd = open64(s, 194, 511LL); | |
if ( fd != -1 ) | |
break; | |
--v11; | |
fd = open64(s, 0); | |
if ( fd != -1 ) | |
{ | |
if ( read(fd, &buf, 0xCuLL) == 12 && (timeout(v7), v2) ) | |
{ | |
close(fd); | |
fd = -1; | |
unlink(s); | |
err_lock(); | |
} | |
else | |
{ | |
close(fd); | |
fd = -1; | |
usleep(0x186A0u); | |
} | |
} | |
} | |
if ( fd == -1 || !v11 ) | |
{ | |
v9 = time(0LL); | |
if ( sub_2D9E0(s, &stat_buf) ) | |
return 0LL; | |
if ( v9 - stat_buf.st_mtim.tv_sec > 10 ) | |
{ | |
unlink(s); | |
fd = open64(s, 194, 511LL); | |
} | |
if ( fd == -1 ) | |
return 0LL; | |
} | |
v7 = time(0LL); | |
buf = getpid(); | |
v6 = a2; | |
if ( write(fd, &buf, 0xCuLL) == 12 ) | |
{ | |
close(fd); | |
return 1LL; | |
} | |
else | |
{ | |
close(fd); | |
unlink(s); | |
return 0LL; | |
} | |
} | |
// 18DAE: variable 'v2' is possibly undefined | |
//----- (0000000000018F14) ---------------------------------------------------- | |
__int64 __fastcall NAS_File_Unlock(const char *a1) | |
{ | |
char s[264]; // [rsp+10h] [rbp-110h] BYREF | |
const char *filename; // [rsp+118h] [rbp-8h] | |
filename = get_filename(a1); | |
sprintf(s, "%s/%s.lck", "/var/lock/NAS", filename); | |
syscall(451LL, s); | |
return 1LL; | |
} | |
//----- (0000000000018F82) ---------------------------------------------------- | |
__int64 __fastcall Is_Exist_Another_Instance(const char *a1) | |
{ | |
char *s; // [rsp+8h] [rbp-248h] | |
char v3[256]; // [rsp+10h] [rbp-240h] BYREF | |
char filename[264]; // [rsp+110h] [rbp-140h] BYREF | |
char *v5; // [rsp+218h] [rbp-38h] | |
FILE *stream; // [rsp+220h] [rbp-30h] | |
int v7; // [rsp+22Ch] [rbp-24h] | |
struct dirent64 *v8; // [rsp+230h] [rbp-20h] | |
DIR *dirp; // [rsp+238h] [rbp-18h] | |
char *s1; // [rsp+240h] [rbp-10h] | |
unsigned int v11; // [rsp+24Ch] [rbp-4h] | |
s = (char *)a1; | |
v11 = 0; | |
s1 = strrchr(a1, 47); | |
if ( s1 ) | |
s = s1 + 1; | |
dirp = opendir("/proc"); | |
if ( !dirp ) | |
return v11; | |
while ( !v11 ) | |
{ | |
v8 = readdir64(dirp); | |
if ( !v8 ) | |
break; | |
v7 = atoi(v8->d_name); | |
if ( v7 ) | |
{ | |
if ( getpid() != v7 ) | |
{ | |
sprintf(filename, "/proc/%s/stat", v8->d_name); | |
stream = fopen64(filename, "r"); | |
if ( stream ) | |
{ | |
v3[0] = 0; | |
fgets(v3, 256, stream); | |
s1 = strchr(v3, 40); | |
v5 = strrchr(v3, 41); | |
if ( s1 && v5 ) | |
{ | |
++s1; | |
*v5 = 0; | |
if ( !strcmp(s1, s) ) | |
v11 = 1; | |
} | |
fclose(stream); | |
} | |
} | |
} | |
} | |
closedir(dirp); | |
return v11; | |
} | |
//----- (000000000001912A) ---------------------------------------------------- | |
__int64 Become_Daemon() | |
{ | |
__pid_t v1; // [rsp+Ch] [rbp-4h] | |
v1 = fork(); | |
if ( v1 < 0 ) | |
return 0LL; | |
if ( v1 > 0 ) | |
exit(0); | |
if ( setsid() < 0 ) | |
return 0LL; | |
chdir("/"); | |
umask(0); | |
return 1LL; | |
} | |
// 1912A: using guessed type __int64 Become_Daemon(); | |
//----- (0000000000019184) ---------------------------------------------------- | |
__int64 __fastcall sub_19184(unsigned __int16 a1) | |
{ | |
__int64 result; // rax | |
LOBYTE(result) = __inbyte(a1); | |
return (unsigned __int8)result; | |
} | |
//----- (000000000001919E) ---------------------------------------------------- | |
__int64 __fastcall sub_1919E(unsigned __int8 a1, unsigned __int16 a2) | |
{ | |
__int64 result; // rax | |
result = a1; | |
__outbyte(a2, a1); | |
return result; | |
} | |
//----- (00000000000191B8) ---------------------------------------------------- | |
__int64 __fastcall uart_start_row(int a1, char a2) | |
{ | |
int v2; // eax | |
int v3; // eax | |
int v4; // eax | |
int v5; // eax | |
int v6; // eax | |
int v7; // eax | |
int v8; // eax | |
char v10[248]; // [rsp+10h] [rbp-130h] BYREF | |
int v11; // [rsp+108h] [rbp-38h] | |
__int16 v12; // [rsp+10Ch] [rbp-34h] | |
char v13; // [rsp+10Eh] [rbp-32h] | |
char *s; // [rsp+110h] [rbp-30h] BYREF | |
int v15; // [rsp+118h] [rbp-28h] | |
int v16; // [rsp+13Ch] [rbp-4h] | |
memset(v10, 0, sizeof(v10)); | |
v11 = 0; | |
v12 = 0; | |
v13 = 0; | |
v16 = 0; | |
memset(&s, 0, 0x20uLL); | |
v2 = v16++; | |
v10[v2] = 15; | |
v3 = v16++; | |
v10[v3] = 14; | |
v4 = v16++; | |
v10[v4] = 0; | |
v5 = v16++; | |
v10[v5] = a2; | |
v6 = v16++; | |
v10[v6] = a2; | |
v7 = v16++; | |
v10[v7] = a2; | |
v8 = v16++; | |
v10[v8] = -1; | |
memset(&s, 0, 0x20uLL); | |
s = v10; | |
v15 = v16; | |
ioctl(a1, 0x402053F6uLL, &s); | |
usleep(0x2710u); | |
return 1LL; | |
} | |
// 191B8: using guessed type char var_130[248]; | |
//----- (0000000000019305) ---------------------------------------------------- | |
__int64 __fastcall uart_prog_8byte(int a1, char a2, char *a3) | |
{ | |
int v3; // eax | |
int v4; // eax | |
int v5; // eax | |
int v6; // eax | |
int v7; // eax | |
int v8; // eax | |
int v9; // eax | |
int v10; // eax | |
int v11; // eax | |
int v12; // eax | |
int v13; // eax | |
int v14; // eax | |
char v17[248]; // [rsp+10h] [rbp-130h] BYREF | |
int v18; // [rsp+108h] [rbp-38h] | |
__int16 v19; // [rsp+10Ch] [rbp-34h] | |
char v20; // [rsp+10Eh] [rbp-32h] | |
char *s; // [rsp+110h] [rbp-30h] BYREF | |
int v22; // [rsp+118h] [rbp-28h] | |
int v23; // [rsp+13Ch] [rbp-4h] | |
memset(v17, 0, sizeof(v17)); | |
v18 = 0; | |
v19 = 0; | |
v20 = 0; | |
v23 = 0; | |
memset(&s, 0, 0x20uLL); | |
v3 = v23++; | |
v17[v3] = 15; | |
v4 = v23++; | |
v17[v4] = 9; | |
v5 = v23++; | |
v17[v5] = a2; | |
v6 = v23++; | |
v17[v6] = *a3; | |
v7 = v23++; | |
v17[v7] = a3[1]; | |
v8 = v23++; | |
v17[v8] = a3[2]; | |
v9 = v23++; | |
v17[v9] = a3[3]; | |
v10 = v23++; | |
v17[v10] = a3[4]; | |
v11 = v23++; | |
v17[v11] = a3[5]; | |
v12 = v23++; | |
v17[v12] = a3[6]; | |
v13 = v23++; | |
v17[v13] = a3[7]; | |
v14 = v23++; | |
v17[v14] = -1; | |
memset(&s, 0, 0x20uLL); | |
s = v17; | |
v22 = v23; | |
ioctl(a1, 0x402053F6uLL, &s); | |
usleep(0x2710u); | |
return 1LL; | |
} | |
// 19305: using guessed type char var_130[248]; | |
//----- (00000000000194FB) ---------------------------------------------------- | |
int __fastcall uart_update_firmware_to_mcu(int a1, __int64 a2, unsigned int a3) | |
{ | |
__int64 s2[2]; // [rsp+10h] [rbp-A0h] BYREF | |
__int64 s[2]; // [rsp+20h] [rbp-90h] BYREF | |
void *v7; // [rsp+30h] [rbp-80h] BYREF | |
int v8; // [rsp+38h] [rbp-78h] | |
char v9; // [rsp+5Ah] [rbp-56h] | |
char v10; // [rsp+5Bh] [rbp-55h] | |
int v11; // [rsp+5Ch] [rbp-54h] | |
unsigned __int64 v12; // [rsp+60h] [rbp-50h] | |
__int64 v13; // [rsp+68h] [rbp-48h] | |
__int64 v14; // [rsp+70h] [rbp-40h] | |
unsigned __int64 v15; // [rsp+78h] [rbp-38h] | |
__int64 v16; // [rsp+80h] [rbp-30h] | |
__int64 v17; // [rsp+88h] [rbp-28h] | |
__int64 v18; // [rsp+90h] [rbp-20h] | |
char v19; // [rsp+9Fh] [rbp-11h] | |
unsigned __int64 i; // [rsp+A0h] [rbp-10h] | |
__int64 v21; // [rsp+A8h] [rbp-8h] | |
s[0] = 0LL; | |
v21 = 0LL; | |
v19 = -1; | |
memset(s, 255, 8uLL); | |
v18 = a2; | |
v17 = a3; | |
v16 = 0LL; | |
v21 = 0LL; | |
v15 = 0LL; | |
v14 = 48LL; | |
v13 = 48LL; | |
puts("Set PIC IOCTL Lock"); | |
ioctl(a1, 0x53F4uLL); | |
usleep(0x7A120u); | |
puts("Connect to MCU chnage to ISP mode .."); | |
memset(&v7, 0, 0x20uLL); | |
v7 = &uart_start_isp; | |
v8 = 8; | |
ioctl(a1, 0x402053F6uLL, &v7); | |
usleep(0x7530u); | |
puts("MCU STOP ..........................."); | |
memset(&v7, 0, 0x20uLL); | |
v7 = &uart_stop_mcu; | |
v8 = 7; | |
ioctl(a1, 0x402053F6uLL, &v7); | |
usleep(0x7530u); | |
if ( v16 ) | |
{ | |
puts("Begin erase chip page data ........."); | |
for ( i = v15; v15 + v13 > i; ++i ) | |
{ | |
v19 = 2 * i; | |
uart_start_row(a1, 2 * i); | |
memset(&v7, 0, 0x20uLL); | |
v7 = &uart_erase_page_en; | |
v8 = 7; | |
ioctl(a1, 0x402053F6uLL, &v7); | |
usleep(0x7530u); | |
memset(&v7, 0, 0x20uLL); | |
v7 = &uart_erase_block; | |
v8 = 7; | |
ioctl(a1, 0x402053F6uLL, &v7); | |
usleep(0x186A0u); | |
memset(&v7, 0, 0x20uLL); | |
v7 = &uart_cmd_finish; | |
v8 = 7; | |
ioctl(a1, 0x402053F6uLL, &v7); | |
usleep(0x7530u); | |
} | |
} | |
else | |
{ | |
puts("Begin erase chip all data .........."); | |
memset(&v7, 0, 0x20uLL); | |
v7 = &uart_erase_chip_en; | |
v8 = 7; | |
ioctl(a1, 0x402053F6uLL, &v7); | |
usleep(0x7530u); | |
memset(&v7, 0, 0x20uLL); | |
v7 = &uart_erase_all; | |
v8 = 7; | |
ioctl(a1, 0x402053F6uLL, &v7); | |
usleep(0x186A0u); | |
memset(&v7, 0, 0x20uLL); | |
v7 = &uart_cmd_finish; | |
v8 = 7; | |
ioctl(a1, 0x402053F6uLL, &v7); | |
usleep(0x7530u); | |
} | |
v12 = (unsigned __int64)(v17 - v16) >> 3; | |
v11 = ((_BYTE)v17 - (_BYTE)v16) & 7; | |
puts("Programming begin to MCU ..........."); | |
for ( i = 0LL; i < v12; ++i ) | |
{ | |
v10 = BYTE1(v21); | |
if ( BYTE1(v21) != v19 ) | |
{ | |
v19 = v10; | |
uart_start_row(a1, v10); | |
} | |
memset(s2, 255, 8uLL); | |
s2[0] = *(_QWORD *)(v18 + v21); | |
v9 = v21; | |
if ( memcmp(s, s2, 8uLL) ) | |
uart_prog_8byte(a1, v9, (char *)s2); | |
v21 += 8LL; | |
} | |
if ( v11 ) | |
{ | |
v10 = BYTE1(v21); | |
if ( BYTE1(v21) != v19 ) | |
{ | |
v19 = v10; | |
uart_start_row(a1, v10); | |
} | |
memset(s2, 255, 8uLL); | |
memcpy(s2, (const void *)(v21 + v18), v11); | |
v9 = v21; | |
uart_prog_8byte(a1, v21, (char *)s2); | |
} | |
memset(&v7, 0, 0x20uLL); | |
v7 = &uart_cmd_finish; | |
v8 = 7; | |
ioctl(a1, 0x402053F6uLL, &v7); | |
usleep(0x7530u); | |
memset(&v7, 0, 0x20uLL); | |
v7 = &uart_reset; | |
v8 = 7; | |
ioctl(a1, 0x402053F6uLL, &v7); | |
usleep(0x7530u); | |
puts("Set PIC IOCTL UnLock"); | |
return ioctl(a1, 0x53F5uLL); | |
} | |
//----- (0000000000019AF2) ---------------------------------------------------- | |
_BOOL8 __fastcall is_pic_raw_running(unsigned int *a1) | |
{ | |
char filename[32]; // [rsp+10h] [rbp-60h] BYREF | |
char s[40]; // [rsp+30h] [rbp-40h] BYREF | |
char *v4; // [rsp+58h] [rbp-18h] | |
char *s2; // [rsp+60h] [rbp-10h] | |
FILE *stream; // [rsp+68h] [rbp-8h] | |
stream = fopen64("/var/run/pic_raw.pid", "r"); | |
if ( !stream ) | |
return 0LL; | |
fgets(s, 32, stream); | |
*a1 = atoi(s); | |
fclose(stream); | |
sprintf(filename, "/proc/%d/stat", *a1); | |
stream = fopen64(filename, "rb"); | |
if ( !stream ) | |
return 0LL; | |
s[0] = 0; | |
fgets(s, 32, stream); | |
fclose(stream); | |
s2 = strchr(s, 40); | |
v4 = strrchr(s, 41); | |
if ( !s2 || !v4 ) | |
return 0LL; | |
++s2; | |
*v4 = 0; | |
return strcmp("pic_raw", s2) == 0; | |
} | |
//----- (0000000000019C3E) ---------------------------------------------------- | |
int __fastcall set_fan_pwm(const char *a1, unsigned int a2) | |
{ | |
char s[256]; // [rsp+10h] [rbp-100h] BYREF | |
if ( (unsigned int)QFAN_Is_Enable() ) | |
return 0; | |
sprintf(s, "/bin/echo %d > %s", a2, a1); | |
return system(s); | |
} | |
// AB90: using guessed type __int64 QFAN_Is_Enable(void); | |
//----- (0000000000019CA4) ---------------------------------------------------- | |
int __fastcall set_fan_pwm_2(int a1) | |
{ | |
char s[128]; // [rsp+10h] [rbp-80h] BYREF | |
sprintf(s, "/sbin/pic_rw 1 1 0x%d >& /dev/null", (unsigned int)(a1 + 30)); | |
return system(s); | |
} | |
//----- (0000000000019CE4) ---------------------------------------------------- | |
__int64 get_fan_pwm() | |
{ | |
char nptr[16]; // [rsp+0h] [rbp-1B0h] BYREF | |
char ptr[256]; // [rsp+10h] [rbp-1A0h] BYREF | |
char command[136]; // [rsp+110h] [rbp-A0h] BYREF | |
FILE *stream; // [rsp+198h] [rbp-18h] | |
char *v5; // [rsp+1A0h] [rbp-10h] | |
unsigned int v6; // [rsp+1ACh] [rbp-4h] | |
strcpy(command, "/sbin/pic_rw 0 2 0xf8 0xfa 4"); | |
stream = popen(command, "r"); | |
if ( !stream ) | |
return 0LL; | |
v6 = fread(ptr, 1uLL, 0x100uLL, stream); | |
pclose(stream); | |
if ( (int)v6 <= 0 ) | |
return 0LL; | |
ptr[v6] = 0; | |
v5 = &ptr[v6 - 1]; | |
if ( *v5 == 13 || *v5 == 10 ) | |
--v5; | |
if ( *v5 == 13 || *v5 == 10 ) | |
--v5; | |
nptr[0] = *(v5 - 2); | |
nptr[1] = *(v5 - 1); | |
nptr[2] = 0; | |
v6 = atoi(nptr); | |
switch ( v6 ) | |
{ | |
case 1u: | |
v6 = 0; | |
break; | |
case 2u: | |
v6 = 1; | |
break; | |
case 4u: | |
v6 = 2; | |
break; | |
case 8u: | |
v6 = 3; | |
break; | |
case 0xAu: | |
v6 = 4; | |
break; | |
case 0x14u: | |
v6 = 5; | |
break; | |
case 0x28u: | |
v6 = 6; | |
break; | |
default: | |
return v6; | |
} | |
return v6; | |
} | |
// 19CE4: using guessed type __int64 get_fan_pwm(); | |
// 19CE4: using guessed type char ptr[256]; | |
//----- (0000000000019E90) ---------------------------------------------------- | |
double __fastcall sub_19E90(const char *a1) | |
{ | |
char s[256]; // [rsp+10h] [rbp-210h] BYREF | |
char command[260]; // [rsp+110h] [rbp-110h] BYREF | |
int v5; // [rsp+214h] [rbp-Ch] | |
FILE *stream; // [rsp+218h] [rbp-8h] | |
memset(s, 0, sizeof(s)); | |
sprintf(command, "/bin/cat %s", a1); | |
stream = popen(command, "r"); | |
if ( !stream ) | |
return -1.0; | |
v5 = fread(s, 1uLL, 0x100uLL, stream); | |
pclose(stream); | |
return atof(s); | |
} | |
//----- (0000000000019F5E) ---------------------------------------------------- | |
double __fastcall sub_19F5E(double a1) | |
{ | |
int v1; // eax | |
char s[76]; // [rsp+10h] [rbp-70h] BYREF | |
int v5; // [rsp+5Ch] [rbp-24h] | |
int fd; // [rsp+60h] [rbp-20h] | |
int v7; // [rsp+64h] [rbp-1Ch] | |
int v8; // [rsp+68h] [rbp-18h] | |
int v9; // [rsp+6Ch] [rbp-14h] | |
int v10; // [rsp+70h] [rbp-10h] | |
unsigned int j; // [rsp+74h] [rbp-Ch] | |
unsigned int i; // [rsp+78h] [rbp-8h] | |
int v13; // [rsp+7Ch] [rbp-4h] | |
v13 = 0; | |
if ( (unsigned int)Is_x59_ProII() || (unsigned int)Is_x59_Plus() ) | |
v13 = 1; | |
if ( v13 == 1 ) | |
{ | |
v8 = 4; | |
v7 = 4; | |
v10 = 0; | |
v9 = 0; | |
for ( i = 1; (int)i <= v8; ++i ) | |
{ | |
for ( j = 1; (int)j <= v7; ++j ) | |
{ | |
snprintf(s, 0x40uLL, "/sys/class/hwmon/hwmon%d/device/temp%d_label", i, j); | |
fd = open64(s, 0); | |
if ( fd >= 0 ) | |
{ | |
v5 = read(fd, s, 0x40uLL); | |
close(fd); | |
if ( v5 > 0 && !strncmp(s, "Core", 4uLL) ) | |
{ | |
snprintf(s, 0x40uLL, "/sys/class/hwmon/hwmon%d/device/temp%d_input", i, j); | |
fd = open64(s, 0); | |
if ( fd >= 0 ) | |
{ | |
v5 = read(fd, s, 0x40uLL); | |
close(fd); | |
if ( v5 > 0 ) | |
{ | |
++v9; | |
v1 = atoi(s); | |
v10 += v1 / 1000; | |
} | |
} | |
} | |
} | |
} | |
} | |
if ( v9 > 0 && v10 > 0 ) | |
return (double)(v10 / v9); | |
} | |
return a1; | |
} | |
// 9B80: using guessed type __int64 Is_x59_ProII(void); | |
// 9CB0: using guessed type __int64 Is_x59_Plus(void); | |
//----- (000000000001A151) ---------------------------------------------------- | |
__int64 Get_Hwmon_All_Status() | |
{ | |
return 0LL; | |
} | |
// 1A151: using guessed type __int64 Get_Hwmon_All_Status(); | |
//----- (000000000001A160) ---------------------------------------------------- | |
__int64 __fastcall sub_1A160(int a1) | |
{ | |
__int64 result; // rax | |
char v2; // al | |
result = (unsigned int)dword_237980; | |
if ( dword_237980 ) | |
{ | |
sub_1919E(0xB6u, 0x43u); | |
sub_1919E(1193180 / a1, 0x42u); | |
sub_1919E((unsigned __int16)(1193180 / a1) >> 8, 0x42u); | |
v2 = sub_19184(0x61u); | |
return sub_1919E(v2 | 3u, 0x61u); | |
} | |
return result; | |
} | |
// 237980: using guessed type int dword_237980; | |
//----- (000000000001A1D7) ---------------------------------------------------- | |
__int64 sub_1A1D7() | |
{ | |
__int64 result; // rax | |
char v1; // al | |
result = (unsigned int)dword_237980; | |
if ( dword_237980 ) | |
{ | |
v1 = sub_19184(0x61u); | |
return sub_1919E(v1 & 0xFC, 0x61u); | |
} | |
return result; | |
} | |
// 237980: using guessed type int dword_237980; | |
//----- (000000000001A207) ---------------------------------------------------- | |
__int64 __fastcall Set_Buzzer_Status(unsigned int a1) | |
{ | |
__int64 result; // rax | |
dword_237980 = 0; | |
if ( !ioperm(0x61uLL, 1uLL, 1) && !ioperm(0x42uLL, 1uLL, 1) && !ioperm(0x43uLL, 1uLL, 1) ) | |
dword_237980 = 1; | |
result = a1; | |
if ( a1 == 81 ) | |
{ | |
sub_1A160(800); | |
sleep(1u); | |
return sub_1A1D7(); | |
} | |
else if ( (int)a1 > 81 ) | |
{ | |
if ( a1 == 144 ) | |
{ | |
return sub_1A160(800); | |
} | |
else if ( a1 == 145 ) | |
{ | |
return sub_1A1D7(); | |
} | |
} | |
else if ( a1 == 80 ) | |
{ | |
sub_1A160(800); | |
usleep(0x7A120u); | |
return sub_1A1D7(); | |
} | |
return result; | |
} | |
// 237980: using guessed type int dword_237980; | |
//----- (000000000001A2EB) ---------------------------------------------------- | |
__int64 __fastcall Pic_Send_Raw_Cmd(unsigned int a1) | |
{ | |
unsigned int v2; // [rsp+1Ch] [rbp-4h] | |
v2 = 0; | |
switch ( a1 ) | |
{ | |
case 'P': | |
SE_Set_Buzzer(0LL, 0LL); | |
break; | |
case 'Q': | |
SE_Set_Buzzer(0LL, 1LL); | |
break; | |
case '`': | |
GPIO_Enable_USB_LED(0LL, 1LL); | |
break; | |
case 'a': | |
GPIO_Enable_USB_LED_BLINK(0LL, 1LL); | |
break; | |
case 'b': | |
GPIO_Enable_USB_LED(0LL, 0LL); | |
break; | |
default: | |
fprintf(stderr, "Not support command = 0x%x\n", a1); | |
v2 = -1; | |
break; | |
} | |
return v2; | |
} | |
// 9B70: using guessed type __int64 __fastcall SE_Set_Buzzer(_QWORD, _QWORD); | |
// A3F0: using guessed type __int64 __fastcall GPIO_Enable_USB_LED_BLINK(_QWORD, _QWORD); | |
// AD00: using guessed type __int64 __fastcall GPIO_Enable_USB_LED(_QWORD, _QWORD); | |
//----- (000000000001A3AD) ---------------------------------------------------- | |
__int64 __fastcall Pic_Send_Raw_Cmds(unsigned __int16 *a1, int a2) | |
{ | |
__int16 s[128]; // [rsp+10h] [rbp-120h] BYREF | |
int v4; // [rsp+110h] [rbp-20h] | |
unsigned int v5; // [rsp+120h] [rbp-10h] | |
int fd; // [rsp+124h] [rbp-Ch] | |
unsigned int v7; // [rsp+128h] [rbp-8h] | |
int i; // [rsp+12Ch] [rbp-4h] | |
v7 = *a1; | |
if ( v7 == 88 ) | |
goto LABEL_7; | |
if ( (int)v7 > 88 ) | |
{ | |
if ( v7 - 144 > 1 ) | |
goto LABEL_7; | |
} | |
else if ( v7 - 80 > 1 ) | |
{ | |
goto LABEL_7; | |
} | |
Set_Buzzer_Status(v7); | |
LABEL_7: | |
if ( a2 <= 128 ) | |
{ | |
fd = open64("/dev/pic", 2); | |
if ( fd >= 0 ) | |
{ | |
memset(s, 0, 0x104uLL); | |
for ( i = 0; i < a2; ++i ) | |
s[i] = a1[i]; | |
v4 = a2; | |
v5 = ioctl(fd, 0x410453EAuLL, s); | |
close(fd); | |
return v5; | |
} | |
else | |
{ | |
fprintf(stderr, "fail to open %s\n", "/dev/pic"); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
else | |
{ | |
fwrite("PIC command buffer overflow.\n", 1uLL, 0x1DuLL, stderr); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
// A4F0: using guessed type __int64 __fastcall Set_Buzzer_Status(_QWORD); | |
// 1A3AD: using guessed type __int16 s[128]; | |
//----- (000000000001A514) ---------------------------------------------------- | |
__int64 __fastcall Pic_Send_Read_EEPROM(char a1, unsigned __int8 a2, __int64 a3) | |
{ | |
char s[260]; // [rsp+10h] [rbp-110h] BYREF | |
unsigned int v6; // [rsp+114h] [rbp-Ch] | |
int fd; // [rsp+118h] [rbp-8h] | |
int i; // [rsp+11Ch] [rbp-4h] | |
fd = open64("/dev/pic", 2); | |
if ( fd >= 0 ) | |
{ | |
memset(s, 0, 0x102uLL); | |
s[0] = a1; | |
s[1] = a2; | |
v6 = ioctl(fd, 0x410253F3uLL, s); | |
s[259] = 0; | |
for ( i = 0; a2 >= i; ++i ) | |
*(_BYTE *)(a3 + i) = s[i + 2]; | |
close(fd); | |
return v6; | |
} | |
else | |
{ | |
fprintf(stderr, "fail to open %s\n", "/dev/pic"); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (000000000001A620) ---------------------------------------------------- | |
__int64 __fastcall Pic_Send_Write_EEPROM(char a1, unsigned __int8 a2, __int64 a3) | |
{ | |
char s[260]; // [rsp+10h] [rbp-110h] BYREF | |
unsigned int v6; // [rsp+114h] [rbp-Ch] | |
int fd; // [rsp+118h] [rbp-8h] | |
int i; // [rsp+11Ch] [rbp-4h] | |
fd = open64("/dev/pic", 2); | |
if ( fd >= 0 ) | |
{ | |
memset(s, 0, 0x102uLL); | |
s[0] = a1; | |
s[1] = a2; | |
for ( i = 0; a2 > i; ++i ) | |
s[i + 2] = *(_BYTE *)(i + a3); | |
v6 = ioctl(fd, 0x410253F2uLL, s); | |
close(fd); | |
return v6; | |
} | |
else | |
{ | |
fprintf(stderr, "fail to open %s\n", "/dev/pic"); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (000000000001A728) ---------------------------------------------------- | |
__int64 __fastcall Pic_Read_Byte(char a1, unsigned __int8 a2, __int64 a3) | |
{ | |
char s[260]; // [rsp+10h] [rbp-110h] BYREF | |
unsigned int v6; // [rsp+114h] [rbp-Ch] | |
int fd; // [rsp+118h] [rbp-8h] | |
int i; // [rsp+11Ch] [rbp-4h] | |
fd = open64("/dev/pic", 2); | |
if ( fd >= 0 ) | |
{ | |
memset(s, 0, 0x102uLL); | |
s[0] = a1; | |
s[1] = a2; | |
v6 = ioctl(fd, 0x410253FBuLL, s); | |
close(fd); | |
for ( i = 0; a2 > i; ++i ) | |
*(_BYTE *)(a3 + i) = s[i + 2]; | |
return v6; | |
} | |
else | |
{ | |
fprintf(stderr, "fail to open %s\n", "/dev/pic"); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (000000000001A830) ---------------------------------------------------- | |
__int64 __fastcall Pic_Send_Message(__int16 a1, __int16 a2) | |
{ | |
__int16 s[128]; // [rsp+10h] [rbp-110h] BYREF | |
int v4; // [rsp+110h] [rbp-10h] | |
unsigned int v5; // [rsp+118h] [rbp-8h] | |
int fd; // [rsp+11Ch] [rbp-4h] | |
fd = open64("/dev/pic", 2); | |
if ( fd >= 0 ) | |
{ | |
memset(s, 0, 0x104uLL); | |
s[0] = a1; | |
++v4; | |
s[1] = a2; | |
++v4; | |
v5 = ioctl(fd, 0x410453E9uLL, s); | |
close(fd); | |
return v5; | |
} | |
else | |
{ | |
fprintf(stderr, "fail to open %s\n", "/dev/pic"); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (000000000001A904) ---------------------------------------------------- | |
__int64 __fastcall Pic_Send_Write_To_MCU(__int64 a1, unsigned int a2) | |
{ | |
int fd; // [rsp+1Ch] [rbp-4h] | |
fd = open64("/dev/pic", 2); | |
if ( fd >= 0 ) | |
{ | |
uart_update_firmware_to_mcu(fd, a1, a2); | |
close(fd); | |
return 0LL; | |
} | |
else | |
{ | |
fprintf(stderr, "fail to open %s\n", "/dev/pic"); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (000000000001A983) ---------------------------------------------------- | |
__int64 __fastcall Pic_Backup_Block_Area(__int64 a1) | |
{ | |
int fd; // [rsp+1Ch] [rbp-4h] | |
fd = open64("/dev/pic", 2); | |
if ( fd >= 0 ) | |
{ | |
ioctl(fd, 0x802053F7uLL, a1); | |
close(fd); | |
return 0LL; | |
} | |
else | |
{ | |
fprintf(stderr, "fail to open %s\n", "/dev/pic"); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (000000000001AA06) ---------------------------------------------------- | |
__int64 __fastcall Pic_Send_Read_Write_DIDO(__int64 a1) | |
{ | |
unsigned int v2; // [rsp+18h] [rbp-8h] | |
int fd; // [rsp+1Ch] [rbp-4h] | |
fd = open64("/dev/pic", 2); | |
if ( fd >= 0 ) | |
{ | |
v2 = ioctl(fd, 0x400453F9uLL, a1); | |
close(fd); | |
return v2; | |
} | |
else | |
{ | |
fprintf(stderr, "fail to open %s\n", "/dev/pic"); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (000000000001AA87) ---------------------------------------------------- | |
__int64 __fastcall Pic_Read_Write(__int64 a1) | |
{ | |
int fd; // [rsp+1Ch] [rbp-4h] | |
fd = open64("/dev/pic", 2); | |
if ( fd >= 0 ) | |
{ | |
ioctl(fd, 0xC01053FAuLL, a1); | |
close(fd); | |
return 0LL; | |
} | |
else | |
{ | |
fprintf(stderr, "fail to open %s\n", "/dev/pic"); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (000000000001AB0A) ---------------------------------------------------- | |
int sub_1AB0A() | |
{ | |
char s[72]; // [rsp+0h] [rbp-50h] BYREF | |
FILE *stream; // [rsp+48h] [rbp-8h] | |
stream = fopen64("/var/ledvalue", "r"); | |
if ( !stream ) | |
return 0; | |
fgets(s, 64, stream); | |
fclose(stream); | |
return atoi(s); | |
} | |
//----- (000000000001AB66) ---------------------------------------------------- | |
__int64 __fastcall sub_1AB66(unsigned int a1) | |
{ | |
char s[72]; // [rsp+10h] [rbp-50h] BYREF | |
FILE *stream; // [rsp+58h] [rbp-8h] | |
stream = fopen64("/var/ledvalue", "w+"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
sprintf(s, "%d", a1); | |
fputs(s, stream); | |
fclose(stream); | |
return 0LL; | |
} | |
//----- (000000000001ABD7) ---------------------------------------------------- | |
__int64 stop_pic_raw() | |
{ | |
__int64 result; // rax | |
unsigned int v1; // [rsp+Ch] [rbp-84h] BYREF | |
char s[128]; // [rsp+10h] [rbp-80h] BYREF | |
result = is_pic_raw_running(&v1); | |
if ( (_DWORD)result ) | |
{ | |
result = NAS_File_Lock("/var/lock/pic_raw.lck", 119LL); | |
if ( (_DWORD)result ) | |
{ | |
if ( is_pic_raw_running(&v1) ) | |
{ | |
sprintf(s, "/bin/kill -9 %d", v1); | |
system(s); | |
unlink("/var/run/pic_raw.pid"); | |
} | |
return NAS_File_Unlock("/var/lock/pic_raw.lck"); | |
} | |
} | |
return result; | |
} | |
// 9CE0: using guessed type __int64 __fastcall NAS_File_Lock(_QWORD, _QWORD); | |
// 9D20: using guessed type __int64 __fastcall NAS_File_Unlock(_QWORD); | |
// 1ABD7: using guessed type __int64 stop_pic_raw(); | |
//----- (000000000001AC61) ---------------------------------------------------- | |
__int64 __fastcall Util_Send_Message(int a1, const char *a2, int a3, __int64 a4) | |
{ | |
int s; // [rsp+20h] [rbp-50h] BYREF | |
char v8[52]; // [rsp+24h] [rbp-4Ch] BYREF | |
int v9; // [rsp+58h] [rbp-18h] | |
__int64 v10; // [rsp+60h] [rbp-10h] | |
int msqid; // [rsp+6Ch] [rbp-4h] | |
memset(&s, 0, 0x48uLL); | |
msqid = msgget(404, 950); | |
s = a1; | |
if ( a2 ) | |
snprintf(v8, 0x32uLL, "%s", a2); | |
v9 = a3; | |
v10 = a4; | |
msgsnd(msqid, &s, 0x40uLL, 0); | |
return 0LL; | |
} | |
// 1AC61: using guessed type char anonymous_0[52]; | |
//----- (000000000001ACFE) ---------------------------------------------------- | |
_BOOL8 __fastcall Set_LOGO_LED_Mode(unsigned int a1) | |
{ | |
switch ( a1 ) | |
{ | |
case 2u: | |
Pic_Send_Raw_Cmd(0xC1u); | |
break; | |
case 3u: | |
Pic_Send_Raw_Cmd(0xC0u); | |
sleep(2u); | |
Pic_Send_Raw_Cmd(0xC2u); | |
break; | |
case 1u: | |
Pic_Send_Raw_Cmd(0xC0u); | |
break; | |
} | |
return Set_Profile_Integer((__int64)"System", (__int64)"QNAP_LOGO_Mode", a1); | |
} | |
//----- (000000000001AD6C) ---------------------------------------------------- | |
_BOOL8 __fastcall Set_Buzzer_Quiet_Mode(int a1) | |
{ | |
if ( a1 == 1 ) | |
return Set_Profile_Boolean((__int64)"Misc", (__int64)"Buzzer Quiet Enable", 1); | |
else | |
return Set_Profile_Boolean((__int64)"Misc", (__int64)"Buzzer Quiet Enable", 0); | |
} | |
//----- (000000000001ADC1) ---------------------------------------------------- | |
__int64 Get_Buzzer_Quiet_Mode() | |
{ | |
char s[16]; // [rsp+0h] [rbp-10h] BYREF | |
memset(s, 0, 6uLL); | |
Get_Profile_String((__int64)"Misc", (__int64)"Buzzer Quiet Enable", (const char *)&unk_2E884, s, 6); | |
if ( !strcmp(s, "TRUE") ) | |
return 1LL; | |
if ( strcmp(s, "FALSE") ) | |
{ | |
usleep(0x186A0u); | |
Set_Profile_Boolean((__int64)"Misc", (__int64)"Buzzer Quiet Enable", 0); | |
} | |
return 0LL; | |
} | |
// 1ADC1: using guessed type __int64 Get_Buzzer_Quiet_Mode(); | |
//----- (000000000001AE6B) ---------------------------------------------------- | |
__int64 lock_system_update() | |
{ | |
int fd; // [rsp+Ch] [rbp-4h] | |
fd = open64("/tmp/nas_system.lock", 192, 493LL); | |
if ( fd == -1 ) | |
return 0xFFFFFFFFLL; | |
close(fd); | |
return 0LL; | |
} | |
// 1AE6B: using guessed type __int64 lock_system_update(); | |
//----- (000000000001AEAF) ---------------------------------------------------- | |
int unlock_system_update() | |
{ | |
return unlink("/tmp/nas_system.lock"); | |
} | |
//----- (000000000001AEC1) ---------------------------------------------------- | |
__int64 Is_System_Update_Locked() | |
{ | |
return Is_File_Exist("/tmp/nas_system.lock"); | |
} | |
// A570: using guessed type __int64 __fastcall Is_File_Exist(_QWORD); | |
// 1AEC1: using guessed type __int64 Is_System_Update_Locked(); | |
//----- (000000000001AED3) ---------------------------------------------------- | |
__int64 Is_Live_Update_In_Progress() | |
{ | |
return Is_File_Exist("/tmp/live_update_process"); | |
} | |
// A570: using guessed type __int64 __fastcall Is_File_Exist(_QWORD); | |
// 1AED3: using guessed type __int64 Is_Live_Update_In_Progress(); | |
//----- (000000000001AEE5) ---------------------------------------------------- | |
__int64 __fastcall Touch_File(const char *a1) | |
{ | |
int fd; // [rsp+18h] [rbp-8h] | |
unsigned int v3; // [rsp+1Ch] [rbp-4h] | |
v3 = 0; | |
if ( utime(a1, 0LL) && *__errno_location() == 2 ) | |
{ | |
fd = open64(a1, 66, 438LL); | |
if ( fd < 0 || close(fd) ) | |
return (unsigned int)-1; | |
else | |
return 0; | |
} | |
return v3; | |
} | |
//----- (000000000001AF60) ---------------------------------------------------- | |
_BOOL8 Is_App_Install_In_Progress() | |
{ | |
return (unsigned int)Is_File_Exist("/tmp/qpkg_setup") || (unsigned int)Is_File_Exist("/tmp/qpkg_installing"); | |
} | |
// A570: using guessed type __int64 __fastcall Is_File_Exist(_QWORD); | |
//----- (000000000001AF92) ---------------------------------------------------- | |
_BOOL8 __fastcall Is_File_Exist(char *a1) | |
{ | |
struct stat64 stat_buf; // [rsp+10h] [rbp-90h] BYREF | |
if ( !a1 ) | |
__assert_fail("filename", "normalutil.c", 0x5Bu, "Is_File_Exist"); | |
return sub_2D9F0(a1, &stat_buf) == 0; | |
} | |
//----- (000000000001AFF0) ---------------------------------------------------- | |
char *__fastcall sub_1AFF0(__int64 a1, unsigned __int8 *a2, _DWORD *a3) | |
{ | |
char *result; // rax | |
int v4; // eax | |
int v5; // eax | |
int v6; // eax | |
char *v8; // [rsp+20h] [rbp-10h] | |
char v9; // [rsp+20h] [rbp-10h] | |
char *v10; // [rsp+28h] [rbp-8h] | |
char *v11; // [rsp+28h] [rbp-8h] | |
*a3 = 0; | |
result = (char *)*a2; | |
if ( (_BYTE)result != 61 ) | |
{ | |
result = (char *)a2[1]; | |
if ( (_BYTE)result != 61 ) | |
{ | |
v10 = strchr(off_236B48, *a2); | |
result = strchr(off_236B48, a2[1]); | |
v8 = result; | |
if ( v10 ) | |
{ | |
if ( result ) | |
{ | |
v4 = (*a3)++; | |
*(_BYTE *)(v4 + a1) = (4 * ((_BYTE)v10 - (_BYTE)off_236B48)) | ((v8 - off_236B48) >> 4); | |
result = (char *)a2[2]; | |
if ( (_BYTE)result != 61 ) | |
{ | |
result = strchr(off_236B48, a2[2]); | |
v11 = result; | |
if ( result ) | |
{ | |
v5 = (*a3)++; | |
*(_BYTE *)(v5 + a1) = (16 * ((_BYTE)v8 - (_BYTE)off_236B48)) | ((v11 - off_236B48) >> 2); | |
result = (char *)a2[3]; | |
if ( (_BYTE)result != 61 ) | |
{ | |
result = strchr(off_236B48, a2[3]); | |
v9 = (char)result; | |
if ( result ) | |
{ | |
v6 = (*a3)++; | |
result = (char *)(v6 + a1); | |
*result = (((_BYTE)v11 - (_BYTE)off_236B48) << 6) | (v9 - (_BYTE)off_236B48); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return result; | |
} | |
//----- (000000000001B1E3) ---------------------------------------------------- | |
__int64 __fastcall Is_Alphabet_Num(_BYTE *a1) | |
{ | |
_BYTE *v2; // [rsp+18h] [rbp-8h] | |
v2 = a1; | |
if ( !a1 ) | |
return 0LL; | |
while ( *v2 ) | |
{ | |
if ( ((*__ctype_b_loc())[(char)*v2] & 8) == 0 ) | |
return 0LL; | |
++v2; | |
} | |
return 1LL; | |
} | |
//----- (000000000001B24D) ---------------------------------------------------- | |
__int64 __fastcall Is_Valid_Servername(_BYTE *a1) | |
{ | |
_BYTE *v2; // [rsp+18h] [rbp-8h] | |
v2 = a1; | |
if ( !a1 ) | |
return 0LL; | |
while ( *v2 ) | |
{ | |
if ( ((*__ctype_b_loc())[(char)*v2] & 8) != 0 ) | |
{ | |
++v2; | |
} | |
else | |
{ | |
if ( *v2 != 45 ) | |
return 0LL; | |
++v2; | |
} | |
} | |
return 1LL; | |
} | |
//----- (000000000001B2C9) ---------------------------------------------------- | |
__int64 __fastcall Is_Valid_Email(const char *a1) | |
{ | |
char *v2; // [rsp+10h] [rbp-30h] | |
int v3; // [rsp+20h] [rbp-20h] | |
int v4; // [rsp+24h] [rbp-1Ch] | |
char *v5; // [rsp+28h] [rbp-18h] | |
char *i; // [rsp+28h] [rbp-18h] | |
char *j; // [rsp+28h] [rbp-18h] | |
char *v8; // [rsp+30h] [rbp-10h] | |
unsigned int v9; // [rsp+3Ch] [rbp-4h] | |
v9 = 0; | |
v8 = 0LL; | |
v3 = 0; | |
if ( a1 ) | |
{ | |
v8 = strdup(a1); | |
if ( v8 ) | |
{ | |
v5 = strchr(v8, 64); | |
if ( v5 ) | |
{ | |
*v5 = 0; | |
v2 = v5 + 1; | |
for ( i = v8; *i; ++i ) | |
{ | |
if ( ((*__ctype_b_loc())[*i] & 2) != 0 | |
|| *i < 0 | |
|| ((*__ctype_b_loc())[*i] & 0x400) == 0 | |
&& ((*__ctype_b_loc())[*i] & 0x800) == 0 | |
&& *i != 45 | |
&& *i != 43 | |
&& *i != 46 | |
&& *i != 95 ) | |
{ | |
goto LABEL_31; | |
} | |
} | |
if ( strlen(v2) <= 0x101 ) | |
{ | |
v4 = 0; | |
for ( j = v2; *j; ++j ) | |
{ | |
if ( ((*__ctype_b_loc())[*j] & 2) != 0 | |
|| *j < 0 | |
|| ((*__ctype_b_loc())[*j] & 0x400) == 0 | |
&& ((*__ctype_b_loc())[*j] & 0x800) == 0 | |
&& *j != 45 | |
&& *j != 46 | |
&& *j != 95 ) | |
{ | |
goto LABEL_31; | |
} | |
if ( *j == 46 ) | |
{ | |
if ( *j == v2[v4 - 1] ) | |
goto LABEL_31; | |
++v3; | |
} | |
++v4; | |
} | |
if ( v3 > 0 ) | |
v9 = 1; | |
} | |
} | |
} | |
} | |
LABEL_31: | |
if ( v8 ) | |
free(v8); | |
return v9; | |
} | |
//----- (000000000001B593) ---------------------------------------------------- | |
__int64 __fastcall Base64_Decode(__int64 a1, unsigned __int8 *a2) | |
{ | |
int v4; // [rsp+18h] [rbp-8h] BYREF | |
unsigned int v5; // [rsp+1Ch] [rbp-4h] | |
v5 = 0; | |
while ( *a2 ) | |
{ | |
sub_1AFF0((int)v5 + a1, a2, &v4); | |
a2 += 4; | |
v5 += v4; | |
} | |
return v5; | |
} | |
//----- (000000000001B5E8) ---------------------------------------------------- | |
__int64 __fastcall sub_1B5E8(char *a1, unsigned __int8 *a2, int a3) | |
{ | |
unsigned __int8 v3; // al | |
unsigned __int8 v4; // al | |
unsigned __int8 v5; // al | |
char v6; // al | |
char v7; // al | |
char v8; // al | |
__int64 result; // rax | |
unsigned __int8 v10; // [rsp+14h] [rbp-10h] | |
unsigned __int8 v11; // [rsp+15h] [rbp-Fh] | |
unsigned __int8 v12; // [rsp+16h] [rbp-Eh] | |
if ( a3 <= 0 ) | |
v3 = 0; | |
else | |
v3 = *a2; | |
v10 = v3; | |
if ( a3 <= 1 ) | |
v4 = 0; | |
else | |
v4 = a2[1]; | |
v11 = v4; | |
if ( a3 <= 2 ) | |
v5 = 0; | |
else | |
v5 = a2[2]; | |
v12 = v5; | |
if ( a3 <= 0 ) | |
v6 = 61; | |
else | |
v6 = off_236B48[v10 >> 2]; | |
*a1 = v6; | |
if ( a3 <= 0 ) | |
v7 = 61; | |
else | |
v7 = off_236B48[(16 * (v10 & 3)) | (v11 >> 4)]; | |
a1[1] = v7; | |
if ( a3 <= 1 ) | |
v8 = 61; | |
else | |
v8 = off_236B48[(4 * (v11 & 0xF)) | (v12 >> 6)]; | |
a1[2] = v8; | |
if ( a3 <= 2 ) | |
result = 61LL; | |
else | |
result = (unsigned __int8)off_236B48[v12 & 0x3F]; | |
a1[3] = result; | |
return result; | |
} | |
//----- (000000000001B722) ---------------------------------------------------- | |
__int64 __fastcall Base64_Encode(__int64 a1, unsigned __int8 *a2, int a3) | |
{ | |
int v3; // eax | |
unsigned int v7; // [rsp+24h] [rbp-4h] | |
v7 = 0; | |
while ( a3 > 0 ) | |
{ | |
v3 = 3; | |
if ( a3 <= 3 ) | |
v3 = a3; | |
sub_1B5E8((char *)(a1 + (int)v7), a2, v3); | |
a3 -= 3; | |
a2 += 3; | |
v7 += 4; | |
} | |
return v7; | |
} | |
//----- (000000000001B781) ---------------------------------------------------- | |
__int64 __fastcall XOR_Encrypt(__int64 a1, int a2, int a3) | |
{ | |
char v4; // cl | |
char s[48]; // [rsp+10h] [rbp-50h] BYREF | |
char *v6; // [rsp+40h] [rbp-20h] | |
char *v7; // [rsp+48h] [rbp-18h] | |
int v8; // [rsp+54h] [rbp-Ch] | |
int v9; // [rsp+58h] [rbp-8h] | |
int i; // [rsp+5Ch] [rbp-4h] | |
i = 0; | |
v9 = 0; | |
v7 = aCde31qaz000000; | |
v6 = &aCde31qaz000000[16]; | |
v8 = 0; | |
if ( a3 == 102 ) | |
{ | |
memset(s, 0, 0x21uLL); | |
if ( (int)Get_Private_Profile_String( | |
(__int64)&unk_2EA9D, | |
(__int64)"SUID", | |
(const char *)&unk_2EA9D, | |
s, | |
33, | |
(__int64)"/etc/platform.conf") <= 0 | |
&& (memset(s, 0, 0x21uLL), (unsigned int)Get_Device_SUID(s, 32LL)) ) | |
{ | |
return a1; | |
} | |
else | |
{ | |
v8 = strlen(s); | |
for ( i = 0; i < a2; ++i ) | |
{ | |
if ( v9 >= v8 ) | |
v9 = 0; | |
*(_BYTE *)(a1 + i) = *(_BYTE *)(i + a1) ^ s[v9++]; | |
} | |
return a1; | |
} | |
} | |
else if ( a3 == 101 ) | |
{ | |
memset(s, 0, 0x21uLL); | |
if ( (int)Get_Private_Profile_String( | |
(__int64)&unk_2EA9D, | |
(__int64)"SUID", | |
(const char *)&unk_2EA9D, | |
s, | |
33, | |
(__int64)"/etc/platform.conf") <= 0 ) | |
{ | |
memset(s, 0, 0x21uLL); | |
if ( (unsigned int)Get_Device_SUID(s, 32LL) ) | |
return a1; | |
v8 = strlen(s); | |
} | |
for ( i = 0; i < a2; ++i ) | |
{ | |
if ( v9 >= v8 ) | |
v9 = 0; | |
*(_BYTE *)(a1 + i) = *(_BYTE *)(i + a1) ^ s[v9++]; | |
} | |
return a1; | |
} | |
else | |
{ | |
v9 = a3 % 16; | |
for ( i = 0; i < a2; ++i ) | |
{ | |
if ( v9 > 15 ) | |
v9 = 0; | |
if ( v9 <= 7 ) | |
v4 = v7[v9]; | |
else | |
v4 = v6[v9]; | |
*(_BYTE *)(i + a1) ^= v4; | |
++v9; | |
} | |
return a1; | |
} | |
} | |
// A620: using guessed type __int64 __fastcall Get_Device_SUID(_QWORD, _QWORD); | |
// 1B781: using guessed type char s[48]; | |
//----- (000000000001BA4B) ---------------------------------------------------- | |
__int64 __fastcall Is_SUID_ENC_SALT_V2(const char *a1) | |
{ | |
unsigned int v2; // [rsp+1Ch] [rbp-4h] | |
v2 = 0; | |
if ( a1 ) | |
return strncmp(a1, "V2@", 3uLL) == 0; | |
return v2; | |
} | |
//----- (000000000001BA8F) ---------------------------------------------------- | |
__int64 __fastcall str_to_hex(const char *a1, __int64 a2, int a3) | |
{ | |
int v5; // [rsp+24h] [rbp-1Ch] | |
int i; // [rsp+28h] [rbp-18h] | |
unsigned int v7; // [rsp+2Ch] [rbp-14h] | |
v7 = -1; | |
v5 = 0; | |
if ( a1 && a2 ) | |
{ | |
for ( i = 0; i < strlen(a1); ++i ) | |
v5 += snprintf((char *)(v5 + a2), a3 - v5, "%02X", (unsigned int)a1[i]); | |
return 0; | |
} | |
return v7; | |
} | |
//----- (000000000001BB36) ---------------------------------------------------- | |
__int64 __fastcall AES_QTS_Encrypt(__int64 a1, int a2, void *a3, const char *a4, int a5) | |
{ | |
__int64 v5; // rax | |
__int64 v6; // rax | |
int v11; // [rsp+28h] [rbp-78h] BYREF | |
int v12; // [rsp+2Ch] [rbp-74h] BYREF | |
__int64 v13[2]; // [rsp+30h] [rbp-70h] BYREF | |
char v14; // [rsp+40h] [rbp-60h] | |
__int64 v15[4]; // [rsp+50h] [rbp-50h] BYREF | |
char v16; // [rsp+70h] [rbp-30h] | |
size_t size; // [rsp+80h] [rbp-20h] | |
__int64 v18; // [rsp+88h] [rbp-18h] | |
void *src; // [rsp+90h] [rbp-10h] | |
unsigned int v20; // [rsp+9Ch] [rbp-4h] | |
memset(v15, 0, sizeof(v15)); | |
v16 = 0; | |
v13[0] = 0LL; | |
v13[1] = 0LL; | |
v14 = 0; | |
size = a2 + 16; | |
v12 = 0; | |
v11 = 0; | |
v20 = -1; | |
src = 0LL; | |
v18 = 0LL; | |
if ( a1 ) | |
{ | |
if ( a3 ) | |
{ | |
if ( a4 ) | |
{ | |
if ( strlen(a4) <= 8 && a2 > 0 ) | |
{ | |
if ( (int)Get_Private_Profile_String( | |
(__int64)&unk_2EA9D, | |
(__int64)"SUID", | |
(const char *)&unk_2EA9D, | |
(char *)v15, | |
33, | |
(__int64)"/etc/platform.conf") > 0 | |
|| (memset(v15, 0, 0x21uLL), !(unsigned int)Get_Device_SUID(v15, 33LL)) ) | |
{ | |
if ( (int)_str_to_hex(a4, (__int64)v13, 17) >= 0 ) | |
{ | |
v18 = EVP_CIPHER_CTX_new(); | |
if ( v18 ) | |
{ | |
src = calloc(1uLL, size); | |
if ( src ) | |
{ | |
if ( a5 == 1 ) | |
{ | |
v5 = EVP_aes_256_cbc(); | |
if ( (unsigned int)EVP_EncryptInit_ex(v18, v5, 0LL, v15, v13) != 1 | |
|| (unsigned int)EVP_EncryptUpdate(v18, src, &v12, a1, (unsigned int)a2) != 1 | |
|| (unsigned int)EVP_EncryptFinal_ex(v18, (char *)src + v12, &v11) != 1 ) | |
{ | |
goto LABEL_21; | |
} | |
LABEL_20: | |
memcpy(a3, src, a2); | |
v20 = 0; | |
goto LABEL_21; | |
} | |
if ( a5 ) | |
goto LABEL_20; | |
v6 = EVP_aes_256_cbc(); | |
if ( (unsigned int)EVP_DecryptInit_ex(v18, v6, 0LL, v15, v13) == 1 ) | |
{ | |
EVP_CIPHER_CTX_set_padding(v18, 0LL); | |
if ( (unsigned int)EVP_DecryptUpdate(v18, src, &v12, a1, (unsigned int)a2) == 1 | |
&& (unsigned int)EVP_DecryptFinal_ex(v18, (char *)src + v12, &v11) == 1 ) | |
{ | |
goto LABEL_20; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
LABEL_21: | |
if ( v18 ) | |
EVP_CIPHER_CTX_free(v18); | |
if ( src ) | |
free(src); | |
return v20; | |
} | |
// 9E30: using guessed type __int64 EVP_CIPHER_CTX_new(void); | |
// A060: using guessed type __int64 __fastcall EVP_CIPHER_CTX_free(_QWORD); | |
// A250: using guessed type __int64 __fastcall EVP_DecryptFinal_ex(_QWORD, _QWORD, _QWORD); | |
// A450: using guessed type __int64 EVP_aes_256_cbc(void); | |
// A590: using guessed type __int64 __fastcall EVP_DecryptInit_ex(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); | |
// A5E0: using guessed type __int64 __fastcall EVP_CIPHER_CTX_set_padding(_QWORD, _QWORD); | |
// A620: using guessed type __int64 __fastcall Get_Device_SUID(_QWORD, _QWORD); | |
// A8E0: using guessed type __int64 __fastcall EVP_DecryptUpdate(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); | |
// A920: using guessed type __int64 __fastcall EVP_EncryptFinal_ex(_QWORD, _QWORD, _QWORD); | |
// A9C0: using guessed type __int64 __fastcall EVP_EncryptInit_ex(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); | |
// AAA0: using guessed type __int64 __fastcall EVP_EncryptUpdate(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); | |
//----- (000000000001BE69) ---------------------------------------------------- | |
char *__fastcall Password_Encode(const char *a1, int a2, int a3) | |
{ | |
__int64 v3; // rax | |
char *v6; // [rsp+10h] [rbp-30h] | |
char *v7; // [rsp+18h] [rbp-28h] | |
char *v8; // [rsp+20h] [rbp-20h] | |
void *ptr; // [rsp+28h] [rbp-18h] | |
char *v10; // [rsp+30h] [rbp-10h] | |
int v11; // [rsp+3Ch] [rbp-4h] | |
v10 = 0LL; | |
ptr = 0LL; | |
v8 = 0LL; | |
v7 = 0LL; | |
v6 = 0LL; | |
if ( a1 ) | |
{ | |
v6 = strdup(a1); | |
if ( a3 == 100 ) | |
{ | |
if ( (a2 & 0xF) != 0 ) | |
v11 = 16 * (a2 / 16 + 1); | |
else | |
v11 = a2; | |
ptr = calloc(1uLL, v11); | |
if ( ptr ) | |
{ | |
if ( (int)AES_QTS_Encrypt((__int64)v6, v11, ptr, "panq@stq", 1) >= 0 ) | |
{ | |
v8 = (char *)calloc(1uLL, 2 * v11); | |
if ( v8 ) | |
{ | |
if ( (int)Base64_Encode(v8, ptr, (unsigned int)v11) > 0 ) | |
{ | |
v7 = (char *)calloc(1uLL, 2 * (v11 + 2)); | |
if ( v7 ) | |
{ | |
snprintf(v7, 2 * (v11 + 2), "%s%s", "V2@", v8); | |
v10 = strdup(v7); | |
} | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
v8 = (char *)calloc(1uLL, 2 * (a2 + 4)); | |
if ( v8 ) | |
{ | |
v3 = XOR_Encrypt((__int64)v6, a2, a3); | |
if ( (int)Base64_Encode(v8, v3, (unsigned int)a2) > 0 ) | |
v10 = strdup(v8); | |
} | |
} | |
} | |
if ( ptr ) | |
free(ptr); | |
if ( v8 ) | |
free(v8); | |
if ( v7 ) | |
free(v7); | |
if ( v6 ) | |
free(v6); | |
return v10; | |
} | |
// A270: using guessed type __int64 __fastcall Base64_Encode(_QWORD, _QWORD, _QWORD); | |
//----- (000000000001C0CA) ---------------------------------------------------- | |
char *__fastcall Password_Decode(const char *a1, int a2) | |
{ | |
size_t v2; // rax | |
size_t v3; // rax | |
int v4; // eax | |
size_t v5; // rax | |
const char *v6; // rax | |
char *s; // [rsp+10h] [rbp-30h] | |
char *sa; // [rsp+10h] [rbp-30h] | |
int v10; // [rsp+1Ch] [rbp-24h] | |
int v11; // [rsp+1Ch] [rbp-24h] | |
void *v12; // [rsp+20h] [rbp-20h] | |
void *ptr; // [rsp+28h] [rbp-18h] | |
char *v14; // [rsp+30h] [rbp-10h] | |
v14 = 0LL; | |
ptr = 0LL; | |
v12 = 0LL; | |
if ( a1 ) | |
{ | |
if ( a2 == 100 ) | |
{ | |
if ( (unsigned int)Is_SUID_ENC_SALT_V2(a1) ) | |
{ | |
s = strstr(a1, "V2@"); | |
if ( s ) | |
{ | |
v2 = strlen(a1); | |
ptr = calloc(1uLL, 2 * v2); | |
if ( ptr ) | |
{ | |
sa = s + 3; | |
if ( strlen(sa) > 0xF ) | |
{ | |
v3 = strlen(sa); | |
v12 = calloc(1uLL, v3); | |
if ( v12 ) | |
{ | |
v10 = Base64_Decode(v12, sa); | |
if ( v10 > 0 ) | |
{ | |
v4 = (v10 & 0xF) != 0 | |
? AES_QTS_Encrypt((__int64)v12, 16 * ((v10 >> 4) + 1), ptr, "panq@stq", 0) | |
: AES_QTS_Encrypt((__int64)v12, v10, ptr, "panq@stq", 0); | |
if ( v4 >= 0 ) | |
{ | |
v14 = (char *)ptr; | |
ptr = 0LL; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
v5 = strlen(a1); | |
v12 = calloc(1uLL, v5); | |
if ( v12 ) | |
{ | |
v11 = Base64_Decode(v12, a1); | |
if ( v11 > 0 ) | |
{ | |
v6 = (const char *)XOR_Encrypt((__int64)v12, v11, a2); | |
v14 = strdup(v6); | |
} | |
} | |
} | |
} | |
if ( ptr ) | |
free(ptr); | |
if ( v12 ) | |
free(v12); | |
return v14; | |
} | |
// 1C200: conditional instruction was optimized away because %var_24.4>=1 | |
// 9E40: using guessed type __int64 __fastcall Base64_Decode(_QWORD, _QWORD); | |
//----- (000000000001C2E9) ---------------------------------------------------- | |
__int64 model_is_pro() | |
{ | |
struct stat64 stat_buf; // [rsp+0h] [rbp-A0h] BYREF | |
int hw_type; // [rsp+9Ch] [rbp-4h] | |
hw_type = get_hw_type(); | |
if ( hw_type == 2 ) | |
return 0LL; | |
if ( hw_type == 1 ) | |
return 0xFFFFFFFFLL; | |
if ( sub_2D9F0("/mnt/HDA_ROOT/.std", &stat_buf) ) | |
return 0LL; | |
return 0xFFFFFFFFLL; | |
} | |
// A3D0: using guessed type __int64 get_hw_type(void); | |
// 1C2E9: using guessed type __int64 model_is_pro(); | |
//----- (000000000001C33E) ---------------------------------------------------- | |
__int64 get_hw_type() | |
{ | |
char s[264]; // [rsp+0h] [rbp-110h] BYREF | |
FILE *stream; // [rsp+108h] [rbp-8h] | |
stream = fopen64("/tmp/hw_type", "a+"); | |
if ( !stream ) | |
return 0LL; | |
fgets(s, 257, stream); | |
fclose(stream); | |
if ( !strncmp(s, "0055", 4uLL) ) | |
return 1LL; | |
if ( !strncmp(s, "0099", 4uLL) ) | |
return 2LL; | |
return 0LL; | |
} | |
// 1C33E: using guessed type __int64 get_hw_type(); | |
//----- (000000000001C3E5) ---------------------------------------------------- | |
unsigned int sync_cmd() | |
{ | |
system("/bin/sync"); | |
return sleep(1u); | |
} | |
//----- (000000000001C401) ---------------------------------------------------- | |
__int64 __fastcall getQPKGDisplayNameIndex(const char *a1) | |
{ | |
unsigned int v2; // [rsp+18h] [rbp-8h] | |
unsigned int i; // [rsp+1Ch] [rbp-4h] | |
v2 = -1; | |
for ( i = 0; qpkg_display_name[2 * (int)i]; ++i ) | |
{ | |
if ( !strcmp(a1, qpkg_display_name[2 * (int)i]) ) | |
return i; | |
} | |
return v2; | |
} | |
// 235340: using guessed type char *qpkg_display_name[12]; | |
//----- (000000000001C47B) ---------------------------------------------------- | |
char *__fastcall Get_Random_Digit_String(int a1) | |
{ | |
unsigned int v1; // eax | |
__int64 v2; // rax | |
__int64 v3; // rax | |
int v5; // [rsp+Ch] [rbp-124h] | |
char v6[16]; // [rsp+10h] [rbp-120h] BYREF | |
char s[268]; // [rsp+20h] [rbp-110h] BYREF | |
int i; // [rsp+12Ch] [rbp-4h] | |
v5 = a1; | |
qmemcpy(v6, "0123456789", 10); | |
if ( a1 > 257 || a1 <= 0 ) | |
v5 = 257; | |
v1 = time(0LL); | |
srandom(v1); | |
v2 = random(); | |
sprintf(s, "%c", (unsigned int)v6[v2 % 8]); | |
for ( i = 1; i < v5; ++i ) | |
{ | |
v3 = random(); | |
sprintf(s, "%s%c", s, (unsigned int)v6[v3 % 10]); | |
} | |
s[v5] = 0; | |
return strdup(s); | |
} | |
// 1C47B: using guessed type char s[268]; | |
//----- (000000000001C5E6) ---------------------------------------------------- | |
__int64 __fastcall Get_Random_String(char *a1, int a2) | |
{ | |
unsigned int v2; // eax | |
int v4; // [rsp+4h] [rbp-15Ch] | |
char v5[36]; // [rsp+10h] [rbp-150h] BYREF | |
char s[272]; // [rsp+40h] [rbp-120h] BYREF | |
int v7; // [rsp+150h] [rbp-10h] | |
int v8; // [rsp+154h] [rbp-Ch] | |
int v9; // [rsp+158h] [rbp-8h] | |
int i; // [rsp+15Ch] [rbp-4h] | |
__int64 savedregs; // [rsp+160h] [rbp+0h] BYREF | |
v4 = a2; | |
v9 = 5; | |
qmemcpy(v5, "abcdefghijklmnopqrstuvwxyz0123456789", sizeof(v5)); | |
if ( a2 > 256 || a2 <= 0 ) | |
v4 = 256; | |
v2 = time(0LL); | |
srandom(v2); | |
v8 = rand() % (v9 + 1); | |
v7 = rand() % (v9 + 1); | |
sprintf(s, "%c", (unsigned int)*((char *)&savedregs + 6 * v8 + v7 - 336)); | |
for ( i = 1; i < v4; ++i ) | |
{ | |
v8 = rand() % (v9 + 1); | |
v7 = rand() % (v9 + 1); | |
sprintf(s, "%s%c", s, (unsigned int)*((char *)&savedregs + 6 * v8 + v7 - 336)); | |
} | |
s[v4] = 0; | |
strcpy(a1, s); | |
return 0LL; | |
} | |
// 1C5E6: using guessed type char s[272]; | |
//----- (000000000001C862) ---------------------------------------------------- | |
__int64 __fastcall Get_Flash_Config(__int64 a1, unsigned int a2, __int64 a3) | |
{ | |
return Blk_Dev_Read_Flash(a1, a2, a3); | |
} | |
// 9CC0: using guessed type __int64 __fastcall Blk_Dev_Read_Flash(_QWORD, _QWORD, _QWORD); | |
//----- (000000000001C891) ---------------------------------------------------- | |
__int64 __fastcall Set_Flash_Config(__int64 a1, __int64 a2) | |
{ | |
return Blk_Dev_Write_Flash(a1, a2); | |
} | |
// 9C60: using guessed type __int64 __fastcall Blk_Dev_Write_Flash(_QWORD, _QWORD); | |
//----- (000000000001C8BB) ---------------------------------------------------- | |
__int64 __fastcall iface_get_hwaddr(const char *a1, char *a2, int a3) | |
{ | |
__int64 v3; // rdx | |
size_t v5; // rbx | |
size_t v6; // rax | |
char *v7; // rax | |
char src[256]; // [rsp+20h] [rbp-3B0h] BYREF | |
char v10; // [rsp+120h] [rbp-2B0h] BYREF | |
_BYTE v11[7]; // [rsp+121h] [rbp-2AFh] BYREF | |
char s[32]; // [rsp+130h] [rbp-2A0h] BYREF | |
char s2[32]; // [rsp+150h] [rbp-280h] BYREF | |
char s1[272]; // [rsp+170h] [rbp-260h] BYREF | |
char v15[264]; // [rsp+280h] [rbp-150h] BYREF | |
char *v16; // [rsp+388h] [rbp-48h] | |
char *v17; // [rsp+390h] [rbp-40h] | |
unsigned int v18; // [rsp+39Ch] [rbp-34h] | |
char *delim; // [rsp+3A0h] [rbp-30h] | |
int v20; // [rsp+3ACh] [rbp-24h] | |
char *nptr; // [rsp+3B0h] [rbp-20h] | |
unsigned int Flash_Config; // [rsp+3BCh] [rbp-14h] | |
delim = "="; | |
Flash_Config = -1; | |
memset(s, 0, 0x12uLL); | |
memset(s2, 255, 0x12uLL); | |
s2[17] = 0; | |
if ( a3 ) | |
{ | |
if ( (unsigned int)Get_CPU_Model(s2, 255LL, v3) == 6282 ) | |
{ | |
if ( (unsigned int)Pic_Send_Read_EEPROM(16, 0x12u, (__int64)s1) ) | |
return 0xFFFFFFFFLL; | |
if ( !strncmp(s1, s2, 0x11uLL) || !strncmp(s1, s, 0x11uLL) ) | |
{ | |
Pic_Send_Write_EEPROM(16, 0x12u, (__int64)"00:00:00:00:05:09"); | |
strcpy(s1, "00:00:00:00:05:09"); | |
} | |
sprintf(v15, "MAC=%s", s1); | |
Flash_Config = 0; | |
} | |
else | |
{ | |
Flash_Config = Get_Flash_Config(7340032LL, 0x16u, (__int64)v15); | |
} | |
} | |
else | |
{ | |
v18 = 18; | |
v17 = "XXX"; | |
nptr = 0LL; | |
memset(src, 0, sizeof(src)); | |
v10 = 0; | |
v20 = 0; | |
if ( (unsigned int)Get_CPU_Model(&v10, 255LL, v11) == 6282 ) | |
{ | |
if ( !strncmp(a1, "eth0", 4uLL) ) | |
{ | |
if ( (unsigned int)Pic_Send_Read_EEPROM(16, 0x12u, (__int64)src) ) | |
return 0xFFFFFFFFLL; | |
if ( !strncmp(src, s2, 0x11uLL) || !strncmp(src, s, 0x11uLL) ) | |
{ | |
Pic_Send_Write_EEPROM(16, 0x12u, (__int64)"00:00:00:00:05:09"); | |
strcpy(src, "00:00:00:00:05:09"); | |
} | |
} | |
else | |
{ | |
if ( strncmp(a1, "eth1", 4uLL) ) | |
return 0xFFFFFFFFLL; | |
if ( (unsigned int)Pic_Send_Read_EEPROM(36, 0x12u, (__int64)src) ) | |
return 0xFFFFFFFFLL; | |
if ( !strcmp(src, s2) || !strcmp(src, s) ) | |
{ | |
Pic_Send_Write_EEPROM(36, 0x12u, (__int64)"00:00:00:00:05:09"); | |
strcpy(src, "00:00:00:00:05:09"); | |
} | |
} | |
strncpy(a2, src, (int)(v18 - 1)); | |
Flash_Config = 0; | |
} | |
else | |
{ | |
v5 = strlen(a1); | |
if ( v5 > strlen(v17) ) | |
nptr = (char *)&a1[strlen(v17)]; | |
if ( nptr ) | |
v20 = atoi(nptr); | |
Flash_Config = Get_Flash_Config((int)(v18 * v20 + 7340960), v18, (__int64)src); | |
v6 = strlen(src); | |
if ( v6 == v18 - 1 ) | |
strncpy(a2, src, (int)(v18 - 1)); | |
else | |
Flash_Config = -1; | |
} | |
} | |
if ( !Flash_Config && a3 ) | |
{ | |
v16 = strtok(v15, delim); | |
if ( v16 && !strncmp(v16, "MAC", 3uLL) ) | |
{ | |
v7 = strtok(0LL, delim); | |
strncpy(s1, v7, 0x11uLL); | |
s1[17] = 0; | |
strcpy(a2, s1); | |
} | |
else | |
{ | |
return (unsigned int)-1; | |
} | |
} | |
return Flash_Config; | |
} | |
// 1C938: variable 'v3' is possibly undefined | |
// A4C0: using guessed type __int64 __fastcall Get_CPU_Model(_QWORD, _QWORD, _QWORD); | |
//----- (000000000001CE02) ---------------------------------------------------- | |
__int64 __fastcall Get_Sys_HWaddr(char *a1) | |
{ | |
return iface_get_hwaddr("eth0", a1, 1); | |
} | |
//----- (000000000001CE28) ---------------------------------------------------- | |
__int64 check_nas_config() | |
{ | |
unsigned int Flash_Config; // [rsp+4h] [rbp-1Ch] | |
void *ptr; // [rsp+10h] [rbp-10h] | |
int i; // [rsp+1Ch] [rbp-4h] | |
ptr = calloc(0x101uLL, 1uLL); | |
if ( !ptr ) | |
return 0xFFFFFFFFLL; | |
Flash_Config = Get_Flash_Config(7342080LL, 0x10u, (__int64)ptr); | |
for ( i = 0; i <= 15; ++i ) | |
; | |
free(ptr); | |
return Flash_Config; | |
} | |
// 1CE28: using guessed type __int64 check_nas_config(); | |
//----- (000000000001CEAC) ---------------------------------------------------- | |
__int64 __fastcall iface_set_hwaddr(const char *a1, __int64 a2, __int64 a3) | |
{ | |
size_t v4; // rbx | |
char s[260]; // [rsp+20h] [rbp-130h] BYREF | |
int v6; // [rsp+124h] [rbp-2Ch] | |
char *v7; // [rsp+128h] [rbp-28h] | |
int v8; // [rsp+130h] [rbp-20h] | |
int v9; // [rsp+134h] [rbp-1Ch] | |
char *nptr; // [rsp+138h] [rbp-18h] | |
v8 = -1; | |
if ( (_DWORD)a3 ) | |
{ | |
if ( (unsigned int)Get_CPU_Model(a1, a2, a3) == 6282 ) | |
{ | |
*(_BYTE *)(a2 + 17) = 0; | |
if ( (unsigned int)Pic_Send_Write_EEPROM(16, 0x12u, a2) ) | |
return 0xFFFFFFFFLL; | |
v8 = 0; | |
} | |
else | |
{ | |
check_nas_config(); | |
memset(s, 0, 0x101uLL); | |
sprintf(s, "MAC=%s", (const char *)a2); | |
v8 = Set_Flash_Config(7340032LL, (__int64)s); | |
if ( v8 ) | |
return 0xFFFFFFFFLL; | |
} | |
} | |
else | |
{ | |
v7 = "XXX"; | |
nptr = 0LL; | |
v9 = 0; | |
v6 = 18; | |
if ( (unsigned int)Get_CPU_Model(a1, a2, a3) == 6282 ) | |
{ | |
if ( !strncmp(a1, "eth0", 4uLL) ) | |
{ | |
if ( (unsigned int)Pic_Send_Write_EEPROM(16, 0x12u, a2) ) | |
return 0xFFFFFFFFLL; | |
} | |
else | |
{ | |
if ( strncmp(a1, "eth1", 4uLL) ) | |
return 0xFFFFFFFFLL; | |
if ( (unsigned int)Pic_Send_Write_EEPROM(36, 0x12u, a2) ) | |
return 0xFFFFFFFFLL; | |
} | |
v8 = 0; | |
} | |
else | |
{ | |
check_nas_config(); | |
v4 = strlen(a1); | |
if ( v4 > strlen(v7) ) | |
nptr = (char *)&a1[strlen(v7)]; | |
if ( nptr ) | |
v9 = atoi(nptr); | |
v8 = Set_Flash_Config(v6 * v9 + 7340960, a2); | |
if ( v8 ) | |
return 0xFFFFFFFFLL; | |
} | |
} | |
return (unsigned int)check_nas_config(); | |
} | |
// A4C0: using guessed type __int64 __fastcall Get_CPU_Model(_QWORD, _QWORD, _QWORD); | |
// A550: using guessed type __int64 check_nas_config(void); | |
//----- (000000000001D126) ---------------------------------------------------- | |
__int64 __fastcall Set_Sys_HWaddr(__int64 a1) | |
{ | |
return iface_set_hwaddr("eth0", a1, 1LL); | |
} | |
//----- (000000000001D14C) ---------------------------------------------------- | |
__int64 __fastcall Get_Sys_HWtype(_DWORD *a1) | |
{ | |
int v1; // ebx | |
int v2; // eax | |
char s[260]; // [rsp+10h] [rbp-140h] BYREF | |
int v5; // [rsp+114h] [rbp-3Ch] | |
char *v6; // [rsp+118h] [rbp-38h] | |
char *nptr; // [rsp+120h] [rbp-30h] | |
char *s1; // [rsp+128h] [rbp-28h] | |
char *delim; // [rsp+130h] [rbp-20h] | |
unsigned int Flash_Config; // [rsp+13Ch] [rbp-14h] | |
delim = "=:"; | |
Flash_Config = -1; | |
Flash_Config = Get_Flash_Config(7340064LL, 0xEu, (__int64)s); | |
if ( !Flash_Config ) | |
{ | |
s1 = strtok(s, delim); | |
if ( s1 && !strncmp(s1, "TYPE", 4uLL) ) | |
{ | |
nptr = strtok(0LL, delim); | |
v6 = strtok(0LL, delim); | |
v1 = atoi(nptr); | |
v2 = atoi(v6); | |
v5 = v1 + v2 - 9900; | |
if ( v1 + v2 == 9999 ) | |
*a1 = 2; | |
else | |
*a1 = v5 == 55; | |
} | |
else | |
{ | |
return (unsigned int)-1; | |
} | |
} | |
return Flash_Config; | |
} | |
//----- (000000000001D279) ---------------------------------------------------- | |
__int64 __fastcall Set_Sys_HWtype(int a1) | |
{ | |
char dest[272]; // [rsp+10h] [rbp-230h] BYREF | |
char s[264]; // [rsp+120h] [rbp-120h] BYREF | |
FILE *stream; // [rsp+228h] [rbp-18h] | |
void *ptr; // [rsp+230h] [rbp-10h] | |
unsigned int v6; // [rsp+238h] [rbp-8h] | |
unsigned int v7; // [rsp+23Ch] [rbp-4h] | |
v6 = -1; | |
v7 = 0; | |
ptr = Get_Random_Digit_String(4); | |
if ( !ptr ) | |
return 0xFFFFFFFFLL; | |
free(ptr); | |
ptr = Get_Random_Digit_String(4); | |
if ( !ptr ) | |
return 0xFFFFFFFFLL; | |
strncpy(dest, (const char *)ptr, 4uLL); | |
free(ptr); | |
ptr = 0LL; | |
dest[4] = 0; | |
if ( a1 == 1 ) | |
{ | |
v7 = 9955 - atoi(dest); | |
} | |
else if ( a1 == 2 ) | |
{ | |
v7 = 9999 - atoi(dest); | |
} | |
sprintf(s, "TYPE=%s:%d", dest, v7); | |
v6 = Set_Flash_Config(7340064LL, (__int64)s); | |
if ( !v6 ) | |
{ | |
stream = fopen64("/tmp/hw_type", "w"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
if ( a1 == 1 ) | |
{ | |
fprintf(stream, "%s\n", "0055"); | |
} | |
else if ( a1 == 2 ) | |
{ | |
fprintf(stream, "%s\n", "0099"); | |
} | |
fclose(stream); | |
} | |
return v6; | |
} | |
//----- (000000000001D43A) ---------------------------------------------------- | |
__int64 Create_HWtypeFile() | |
{ | |
int v1; // [rsp+Ch] [rbp-14h] BYREF | |
FILE *stream; // [rsp+10h] [rbp-10h] | |
unsigned int Sys_HWtype; // [rsp+1Ch] [rbp-4h] | |
Sys_HWtype = -1; | |
v1 = 0; | |
Sys_HWtype = Get_Sys_HWtype(&v1); | |
if ( !Sys_HWtype ) | |
{ | |
stream = fopen64("/tmp/hw_type", "w"); | |
if ( stream ) | |
{ | |
if ( v1 == 1 ) | |
{ | |
fprintf(stream, "%s\n", "0055"); | |
} | |
else if ( v1 == 2 ) | |
{ | |
fprintf(stream, "%s\n", "0099"); | |
} | |
else | |
{ | |
fprintf(stream, "%s\n", "0000"); | |
} | |
fclose(stream); | |
} | |
else | |
{ | |
return (unsigned int)-1; | |
} | |
} | |
return Sys_HWtype; | |
} | |
// 1D43A: using guessed type __int64 Create_HWtypeFile(); | |
//----- (000000000001D512) ---------------------------------------------------- | |
__int64 __fastcall Get_Str_By_Offset(const char *a1, __off64_t a2, int a3, char *a4) | |
{ | |
int v4; // eax | |
char buf[260]; // [rsp+20h] [rbp-110h] BYREF | |
int fd; // [rsp+124h] [rbp-Ch] | |
unsigned int nbytes; // [rsp+128h] [rbp-8h] | |
int nbytes_4; // [rsp+12Ch] [rbp-4h] | |
nbytes_4 = -1; | |
v4 = 257; | |
if ( a3 <= 257 ) | |
v4 = a3; | |
nbytes = v4; | |
fd = open64(a1, 0); | |
if ( fd < 0 ) | |
return 0xFFFFFFFFLL; | |
if ( a2 < 0 ) | |
{ | |
if ( lseek64(fd, a2, 2) == -1 ) | |
goto LABEL_7; | |
} | |
else if ( lseek64(fd, a2, 0) == -1 ) | |
{ | |
LABEL_7: | |
close(fd); | |
return 0xFFFFFFFFLL; | |
} | |
if ( read(fd, buf, nbytes) == -1 ) | |
{ | |
close(fd); | |
return 0xFFFFFFFFLL; | |
} | |
else | |
{ | |
close(fd); | |
buf[nbytes] = 0; | |
strcpy(a4, buf); | |
return 0LL; | |
} | |
} | |
// 1D512: using guessed type char buf[260]; | |
//----- (000000000001D654) ---------------------------------------------------- | |
__int64 __fastcall Remove_Last_Chars(const char *a1, int a2) | |
{ | |
char s[1024]; // [rsp+10h] [rbp-820h] BYREF | |
char ptr[1024]; // [rsp+410h] [rbp-420h] BYREF | |
FILE *v5; // [rsp+810h] [rbp-20h] | |
FILE *stream; // [rsp+818h] [rbp-18h] | |
int v7; // [rsp+824h] [rbp-Ch] | |
int v8; // [rsp+828h] [rbp-8h] | |
int v9; // [rsp+82Ch] [rbp-4h] | |
v7 = 0; | |
stream = fopen64(a1, "rb+"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
sprintf(s, "%s.tmp", a1); | |
v5 = fopen64(s, "wb"); | |
if ( v5 ) | |
{ | |
fseek(stream, 0LL, 2); | |
v8 = ftell(stream); | |
rewind(stream); | |
for ( v8 -= a2; v8 > 0; v8 -= v9 ) | |
{ | |
v9 = 1024; | |
if ( v8 <= 1023 ) | |
v9 = v8; | |
if ( !fread(ptr, 1uLL, v9, stream) && (feof(stream) || ferror(stream)) ) | |
{ | |
fclose(stream); | |
fclose(v5); | |
return 0xFFFFFFFFLL; | |
} | |
fwrite(ptr, 1uLL, v9, v5); | |
} | |
fclose(stream); | |
fclose(v5); | |
unlink(a1); | |
return (unsigned int)rename(s, a1); | |
} | |
else | |
{ | |
fclose(stream); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (000000000001D824) ---------------------------------------------------- | |
__int64 __fastcall Get_QPKG_Encrypt_String(char *a1, char *a2) | |
{ | |
char v3[2064]; // [rsp+10h] [rbp-9B0h] BYREF | |
struct stat64 stat_buf; // [rsp+820h] [rbp-1A0h] BYREF | |
char s[264]; // [rsp+8B0h] [rbp-110h] BYREF | |
__off_t v6; // [rsp+9B8h] [rbp-8h] | |
if ( sub_2D9F0(a1, &stat_buf) ) | |
return 0xFFFFFFFFLL; | |
if ( (stat_buf.st_mode & 0xF000) != 0x8000 ) | |
return 0xFFFFFFFFLL; | |
if ( !Is_QNAPFlag_Exist(a1, "QNAPQPKG") && !Is_QNAPFlag_Exist(a1, "QNAPQFIX") ) | |
return 0xFFFFFFFFLL; | |
if ( (unsigned int)Get_QNAPFlag_File_Info(a1, v3) ) | |
return 0xFFFFFFFFLL; | |
v6 = 3589 * stat_buf.st_size + 1000000000; | |
sprintf(s, "%llu", v6); | |
s[10] = 0; | |
strcpy(a2, s); | |
return 0LL; | |
} | |
// 1D824: using guessed type char var_9B0[2064]; | |
//----- (000000000001D940) ---------------------------------------------------- | |
__int64 __fastcall Get_QPKG_Auth_Encrypt_String(char *a1, char *a2) | |
{ | |
char v3[2064]; // [rsp+10h] [rbp-9B0h] BYREF | |
struct stat64 stat_buf; // [rsp+820h] [rbp-1A0h] BYREF | |
char s[264]; // [rsp+8B0h] [rbp-110h] BYREF | |
__off_t v6; // [rsp+9B8h] [rbp-8h] | |
if ( sub_2D9F0(a1, &stat_buf) ) | |
return 0xFFFFFFFFLL; | |
if ( (stat_buf.st_mode & 0xF000) != 0x8000 ) | |
return 0xFFFFFFFFLL; | |
if ( !Is_QNAPFlag_Exist(a1, "QNAPQPKG") && !Is_QNAPFlag_Exist(a1, "QNAPQFIX") ) | |
return 0xFFFFFFFFLL; | |
if ( (unsigned int)Get_QNAPFlag_File_Info(a1, v3) ) | |
return 0xFFFFFFFFLL; | |
v6 = 9151 * stat_buf.st_size + 1000000000; | |
sprintf(s, "%llu", v6); | |
s[10] = 0; | |
strcpy(a2, s); | |
return 0LL; | |
} | |
// 1D940: using guessed type char var_9B0[2064]; | |
//----- (000000000001DA5C) ---------------------------------------------------- | |
_BOOL8 __fastcall Is_QNAPFlag_Exist(const char *a1, const char *a2) | |
{ | |
char s2[268]; // [rsp+10h] [rbp-120h] BYREF | |
int Str_By_Offset; // [rsp+11Ch] [rbp-14h] | |
__int64 v5; // [rsp+120h] [rbp-10h] | |
int v6; // [rsp+12Ch] [rbp-4h] | |
if ( !a2 ) | |
return 0LL; | |
v6 = strlen(a2); | |
v5 = -10LL; | |
Str_By_Offset = Get_Str_By_Offset(a1, -10LL, 10, s2); | |
return !Str_By_Offset && !strncmp(a2, s2, v6); | |
} | |
//----- (000000000001DAFC) ---------------------------------------------------- | |
__int64 __fastcall Get_QNAPFlag_File_Info(const char *a1, char *a2) | |
{ | |
char src[260]; // [rsp+10h] [rbp-110h] BYREF | |
unsigned int Str_By_Offset; // [rsp+114h] [rbp-Ch] | |
__int64 v5; // [rsp+118h] [rbp-8h] | |
v5 = -100LL; | |
Str_By_Offset = Get_Str_By_Offset(a1, -100LL, 10, src); | |
if ( Str_By_Offset ) | |
return 0xFFFFFFFFLL; | |
strncpy(a2, src, 0x101uLL); | |
v5 = -10LL; | |
Str_By_Offset = Get_Str_By_Offset(a1, -10LL, 10, src); | |
if ( Str_By_Offset ) | |
return 0xFFFFFFFFLL; | |
strncpy(a2 + 771, src, 0x101uLL); | |
v5 = -20LL; | |
Str_By_Offset = Get_Str_By_Offset(a1, -20LL, 10, src); | |
if ( Str_By_Offset ) | |
return 0xFFFFFFFFLL; | |
strncpy(a2 + 514, src, 0x101uLL); | |
v5 = -40LL; | |
Str_By_Offset = Get_Str_By_Offset(a1, -40LL, 20, src); | |
if ( Str_By_Offset ) | |
return 0xFFFFFFFFLL; | |
strncpy(a2 + 257, src, 0x101uLL); | |
v5 = -50LL; | |
Str_By_Offset = Get_Str_By_Offset(a1, -50LL, 10, src); | |
if ( Str_By_Offset ) | |
return 0xFFFFFFFFLL; | |
strncpy(a2 + 1542, src, 0x101uLL); | |
v5 = -60LL; | |
Str_By_Offset = Get_Str_By_Offset(a1, -60LL, 10, src); | |
if ( Str_By_Offset ) | |
return 0xFFFFFFFFLL; | |
strncpy(a2 + 1028, src, 0x101uLL); | |
v5 = -70LL; | |
Str_By_Offset = Get_Str_By_Offset(a1, -70LL, 10, src); | |
if ( Str_By_Offset ) | |
return 0xFFFFFFFFLL; | |
strncpy(a2 + 1285, src, 0x101uLL); | |
v5 = -80LL; | |
Str_By_Offset = Get_Str_By_Offset(a1, -80LL, 10, src); | |
if ( Str_By_Offset ) | |
return 0xFFFFFFFFLL; | |
strncpy(a2 + 1799, src, 0x101uLL); | |
return Str_By_Offset; | |
} | |
//----- (000000000001DE20) ---------------------------------------------------- | |
__int64 __fastcall Is_QPKG_FW_Match(const char *a1) | |
{ | |
size_t v2; // rax | |
char s1[272]; // [rsp+10h] [rbp-220h] BYREF | |
char s2[260]; // [rsp+120h] [rbp-110h] BYREF | |
int Str_By_Offset; // [rsp+224h] [rbp-Ch] | |
__int64 v6; // [rsp+228h] [rbp-8h] | |
if ( !Is_QNAPFlag_Exist(a1, "QNAPQPKG") && !Is_QNAPFlag_Exist(a1, "QNAPQFIX") ) | |
return 0LL; | |
Get_Profile_String((__int64)"System", (__int64)"Version", "--", s1, 257); | |
if ( !strcasecmp(s1, "--") ) | |
return 0xFFFFFFFFLL; | |
v6 = -50LL; | |
Str_By_Offset = Get_Str_By_Offset(a1, -50LL, 10, s2); | |
if ( Str_By_Offset ) | |
return 0LL; | |
if ( !strncmp("HAL", s2, 3uLL) ) | |
return 1LL; | |
v2 = strlen(s1); | |
Str_By_Offset = strncmp(s1, s2, v2); | |
return !Str_By_Offset || !strncmp(s2, " ", 0xAuLL); | |
} | |
//----- (000000000001DF82) ---------------------------------------------------- | |
_BOOL8 __fastcall Is_QNAP_QPKG(const char *a1) | |
{ | |
char s1[16]; // [rsp+10h] [rbp-120h] BYREF | |
char s2[260]; // [rsp+20h] [rbp-110h] BYREF | |
__int64 v5; // [rsp+128h] [rbp-8h] | |
if ( !Is_QNAPFlag_Exist(a1, "QNAPQPKG") && !Is_QNAPFlag_Exist(a1, "QNAPQFIX") ) | |
return 0LL; | |
if ( (unsigned int)Get_QPKG_Encrypt_String(a1, s1) ) | |
return 0LL; | |
v5 = -60LL; | |
return !(unsigned int)Get_Str_By_Offset(a1, -60LL, 10, s2) && strncmp(s1, s2, 0xAuLL) == 0; | |
} | |
// 9B60: using guessed type __int64 __fastcall Get_QPKG_Encrypt_String(_QWORD, _QWORD); | |
//----- (000000000001E065) ---------------------------------------------------- | |
_BOOL8 __fastcall Is_QNAP_Auth_QPKG(const char *a1) | |
{ | |
char s1[16]; // [rsp+10h] [rbp-120h] BYREF | |
char s2[260]; // [rsp+20h] [rbp-110h] BYREF | |
__int64 v5; // [rsp+128h] [rbp-8h] | |
if ( !Is_QNAPFlag_Exist(a1, "QNAPQPKG") && !Is_QNAPFlag_Exist(a1, "QNAPQFIX") ) | |
return 0LL; | |
if ( (unsigned int)Get_QPKG_Auth_Encrypt_String(a1, s1) ) | |
return 0LL; | |
v5 = -70LL; | |
return !(unsigned int)Get_Str_By_Offset(a1, -70LL, 10, s2) && strncmp(s1, s2, 0xAuLL) == 0; | |
} | |
// 9FE0: using guessed type __int64 __fastcall Get_QPKG_Auth_Encrypt_String(_QWORD, _QWORD); | |
//----- (000000000001E148) ---------------------------------------------------- | |
__int64 __fastcall Set_QPKG_Encrypt(const char *a1) | |
{ | |
char v2[16]; // [rsp+10h] [rbp-20h] BYREF | |
FILE *stream; // [rsp+20h] [rbp-10h] | |
int i; // [rsp+2Ch] [rbp-4h] | |
if ( (unsigned int)Get_QPKG_Encrypt_String(a1, v2) ) | |
return 0xFFFFFFFFLL; | |
stream = fopen64(a1, "rb+"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
fseek(stream, -60LL, 2); | |
for ( i = 0; i <= 9; ++i ) | |
fputc(v2[i], stream); | |
fclose(stream); | |
return 0LL; | |
} | |
// 9B60: using guessed type __int64 __fastcall Get_QPKG_Encrypt_String(_QWORD, _QWORD); | |
// 1E148: using guessed type char var_20[16]; | |
//----- (000000000001E1F0) ---------------------------------------------------- | |
__int64 __fastcall Set_QPKG_Auth_Encrypt(const char *a1) | |
{ | |
char v2[16]; // [rsp+10h] [rbp-20h] BYREF | |
FILE *stream; // [rsp+20h] [rbp-10h] | |
int i; // [rsp+2Ch] [rbp-4h] | |
if ( (unsigned int)Get_QPKG_Auth_Encrypt_String(a1, v2) ) | |
return 0xFFFFFFFFLL; | |
stream = fopen64(a1, "rb+"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
fseek(stream, -70LL, 2); | |
for ( i = 0; i <= 9; ++i ) | |
fputc(v2[i], stream); | |
fclose(stream); | |
return 0LL; | |
} | |
// 9FE0: using guessed type __int64 __fastcall Get_QPKG_Auth_Encrypt_String(_QWORD, _QWORD); | |
// 1E1F0: using guessed type char var_20[16]; | |
//----- (000000000001E298) ---------------------------------------------------- | |
__int64 __fastcall Set_QPKG_FW_Version(const char *a1) | |
{ | |
size_t v2; // rbx | |
char s1[272]; // [rsp+10h] [rbp-130h] BYREF | |
FILE *stream; // [rsp+120h] [rbp-20h] | |
int i; // [rsp+12Ch] [rbp-14h] | |
Get_Profile_String((__int64)"System", (__int64)"Version", "--", s1, 257); | |
if ( !strcasecmp(s1, "--") ) | |
return 0xFFFFFFFFLL; | |
stream = fopen64(a1, "rb+"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
if ( fseek(stream, -50LL, 2) == -1 ) | |
{ | |
fclose(stream); | |
return 0xFFFFFFFFLL; | |
} | |
else | |
{ | |
if ( strlen(s1) > 9 ) | |
{ | |
for ( i = 0; i <= 9; ++i ) | |
fputc(s1[i], stream); | |
} | |
else | |
{ | |
for ( i = 0; ; ++i ) | |
{ | |
v2 = i; | |
if ( v2 >= strlen(s1) ) | |
break; | |
fputc(s1[i], stream); | |
} | |
} | |
fclose(stream); | |
return 0LL; | |
} | |
} | |
// 1E298: using guessed type char s1[272]; | |
//----- (000000000001E3FF) ---------------------------------------------------- | |
__int64 __fastcall Set_QPKG_Flag(const char *a1, int a2, const char *a3) | |
{ | |
FILE *stream; // [rsp+20h] [rbp-20h] | |
int i; // [rsp+2Ch] [rbp-14h] | |
if ( a2 > 0 ) | |
return 0xFFFFFFFFLL; | |
stream = fopen64(a1, "rb+"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
if ( fseek(stream, 10 * a2, 2) == -1 ) | |
{ | |
fclose(stream); | |
return 0xFFFFFFFFLL; | |
} | |
else | |
{ | |
for ( i = 0; i <= 9; ++i ) | |
{ | |
if ( a3[i] && i < strlen(a3) ) | |
fputc(a3[i], stream); | |
else | |
fputc(0, stream); | |
} | |
fclose(stream); | |
return 0LL; | |
} | |
} | |
//----- (000000000001E509) ---------------------------------------------------- | |
__int64 __fastcall Get_One_QFIX_Info(const char *a1, __int64 a2) | |
{ | |
char *v3; // [rsp+18h] [rbp-18h] | |
int v4; // [rsp+24h] [rbp-Ch] | |
int i; // [rsp+28h] [rbp-8h] | |
unsigned int One_QPKG_Info_Dir; // [rsp+2Ch] [rbp-4h] | |
One_QPKG_Info_Dir = -1; | |
v4 = 0; | |
v3 = Conf_Dir_Load("/etc/config/qfix.conf"); | |
if ( !v3 ) | |
return 0xFFFFFFFFLL; | |
for ( i = 0; *((_DWORD *)v3 + 258) > i; ++i ) | |
{ | |
if ( !strcasecmp(a1, *(const char **)(8LL * i + *((_QWORD *)v3 + 131))) ) | |
{ | |
v4 = 1; | |
break; | |
} | |
} | |
if ( v4 ) | |
One_QPKG_Info_Dir = Get_One_QPKG_Info_Dir(v3, a1, a2); | |
Conf_Dir_Free((__int64)v3); | |
return One_QPKG_Info_Dir; | |
} | |
// A520: using guessed type __int64 __fastcall Get_One_QPKG_Info_Dir(_QWORD, _QWORD, _QWORD); | |
//----- (000000000001E5D1) ---------------------------------------------------- | |
__int64 __fastcall Get_All_QFIX_Info(void **a1) | |
{ | |
struct stat64 stat_buf; // [rsp+10h] [rbp-2CC0h] BYREF | |
char src[11272]; // [rsp+A0h] [rbp-2C30h] BYREF | |
char *v4; // [rsp+2CA8h] [rbp-28h] | |
char *v5; // [rsp+2CB0h] [rbp-20h] | |
int One_QPKG_Info_Dir; // [rsp+2CBCh] [rbp-14h] | |
int i; // [rsp+2CC0h] [rbp-10h] | |
unsigned int v8; // [rsp+2CC4h] [rbp-Ch] | |
void *ptr; // [rsp+2CC8h] [rbp-8h] | |
ptr = 0LL; | |
One_QPKG_Info_Dir = -1; | |
v8 = 0; | |
v5 = 0LL; | |
if ( sub_2D9F0("/etc/config/qfix.conf", &stat_buf) ) | |
return 0xFFFFFFFFLL; | |
v4 = Conf_Dir_Load("/etc/config/qfix.conf"); | |
if ( !v4 ) | |
return 0LL; | |
for ( i = 0; ; ++i ) | |
{ | |
if ( *((_DWORD *)v4 + 258) <= i ) | |
{ | |
Conf_Dir_Free((__int64)v4); | |
*a1 = ptr; | |
return v8; | |
} | |
One_QPKG_Info_Dir = Get_One_QPKG_Info_Dir(v4, *(_QWORD *)(8LL * i + *((_QWORD *)v4 + 131)), src); | |
if ( One_QPKG_Info_Dir >= 0 ) | |
break; | |
LABEL_14: | |
; | |
} | |
v5 = (char *)realloc(ptr, 11268LL * (int)(v8 + 1)); | |
if ( v5 ) | |
{ | |
ptr = v5; | |
memcpy(&v5[11268 * v8++], src, 0x2C04uLL); | |
goto LABEL_14; | |
} | |
if ( ptr ) | |
free(ptr); | |
if ( v4 ) | |
Conf_Dir_Free((__int64)v4); | |
return 4294967286LL; | |
} | |
// A520: using guessed type __int64 __fastcall Get_One_QPKG_Info_Dir(_QWORD, _QWORD, _QWORD); | |
//----- (000000000001E756) ---------------------------------------------------- | |
__int64 __fastcall Get_One_QPKG_Info(const char *a1, __int64 a2) | |
{ | |
char *v3; // [rsp+18h] [rbp-18h] | |
int v4; // [rsp+24h] [rbp-Ch] | |
int i; // [rsp+28h] [rbp-8h] | |
unsigned int One_QPKG_Info_Dir; // [rsp+2Ch] [rbp-4h] | |
One_QPKG_Info_Dir = -1; | |
v4 = 0; | |
v3 = Conf_Dir_Load("/etc/config/qpkg.conf"); | |
if ( !v3 ) | |
return 0xFFFFFFFFLL; | |
for ( i = 0; *((_DWORD *)v3 + 258) > i; ++i ) | |
{ | |
if ( !strcasecmp(a1, *(const char **)(8LL * i + *((_QWORD *)v3 + 131))) ) | |
{ | |
v4 = 1; | |
break; | |
} | |
} | |
if ( v4 ) | |
One_QPKG_Info_Dir = Get_One_QPKG_Info_Dir(v3, a1, a2); | |
Conf_Dir_Free((__int64)v3); | |
return One_QPKG_Info_Dir; | |
} | |
// A520: using guessed type __int64 __fastcall Get_One_QPKG_Info_Dir(_QWORD, _QWORD, _QWORD); | |
//----- (000000000001E81E) ---------------------------------------------------- | |
__int64 __fastcall Get_One_QPKG_Info_Dir(__int64 a1, const char *a2, __int64 a3) | |
{ | |
unsigned int v3; // edx | |
char nptr[8]; // [rsp+20h] [rbp-A60h] BYREF | |
__int64 v7; // [rsp+28h] [rbp-A58h] | |
__int64 v8; // [rsp+30h] [rbp-A50h] | |
__int64 v9; // [rsp+38h] [rbp-A48h] | |
char v10[2568]; // [rsp+40h] [rbp-A40h] BYREF | |
__int16 v11; // [rsp+A48h] [rbp-38h] | |
char v12; // [rsp+A4Ah] [rbp-36h] | |
int v13; // [rsp+A58h] [rbp-28h] | |
int v14; // [rsp+A5Ch] [rbp-24h] | |
char *delim; // [rsp+A60h] [rbp-20h] | |
int v16; // [rsp+A68h] [rbp-18h] | |
int QPKGDisplayNameIndex; // [rsp+A6Ch] [rbp-14h] | |
char *src; // [rsp+A70h] [rbp-10h] | |
int v19; // [rsp+A7Ch] [rbp-4h] | |
QPKGDisplayNameIndex = -1; | |
v19 = 0; | |
v16 = 0; | |
memset(v10, 0, sizeof(v10)); | |
v11 = 0; | |
v12 = 0; | |
delim = ":"; | |
src = 0LL; | |
*(_DWORD *)(a3 + 10988) = 0; | |
if ( !Conf_Dir_Get_Str(a1, a2, "Name", 0LL, (char *)a3, 257) ) | |
{ | |
*(_DWORD *)(a3 + 10988) = 1; | |
snprintf((char *)a3, 0x101uLL, "%s", a2); | |
} | |
if ( strcasecmp(a2, (const char *)a3) ) | |
{ | |
*(_DWORD *)(a3 + 10988) = 1; | |
snprintf((char *)a3, 0x101uLL, "%s", a2); | |
} | |
if ( !Conf_Dir_Get_Str(a1, a2, "Display_Name", 0LL, (char *)(a3 + 257), 257) ) | |
{ | |
QPKGDisplayNameIndex = getQPKGDisplayNameIndex((const char *)a3); | |
if ( QPKGDisplayNameIndex < 0 ) | |
snprintf((char *)(a3 + 257), 0x101uLL, "%s", (const char *)a3); | |
else | |
snprintf((char *)(a3 + 257), 0x101uLL, "%s", qpkg_display_name[2 * QPKGDisplayNameIndex + 1]); | |
} | |
Conf_Dir_Get_Str(a1, a2, "Version", "null", (char *)(a3 + 514), 257); | |
Conf_Dir_Get_Str(a1, a2, "Enable", "null", (char *)(a3 + 771), 257); | |
Conf_Dir_Get_Str(a1, a2, "Date", "null", (char *)(a3 + 1032), 257); | |
Conf_Dir_Get_Str(a1, a2, "Shell", "null", (char *)(a3 + 1289), 257); | |
Conf_Dir_Get_Str(a1, a2, "Install_Path", "null", (char *)(a3 + 1546), 514); | |
Conf_Dir_Get_Str(a1, a2, "Config_Path", "null", (char *)(a3 + 2060), 514); | |
Conf_Dir_Get_Str(a1, a2, "WebUI", "null", (char *)(a3 + 2574), 514); | |
Conf_Dir_Get_Str(a1, a2, "Proxy_Path", "null", (char *)(a3 + 6268), 514); | |
Conf_Dir_Get_Str(a1, a2, "QPKG_File", "null", (char *)(a3 + 3602), 257); | |
Conf_Dir_Get_Str(a1, a2, "Provider", "null", (char *)(a3 + 3088), 257); | |
Conf_Dir_Get_Str(a1, a2, "Author", "null", (char *)(a3 + 3345), 257); | |
Conf_Dir_Get_Str(a1, a2, "Pid_File", "null", (char *)(a3 + 3868), 514); | |
Conf_Dir_Get_Str(a1, a2, "Class", "null", (char *)(a3 + 4382), 257); | |
Conf_Dir_Get_Str(a1, a2, "store", "null", (char *)(a3 + 4639), 257); | |
Conf_Dir_Get_Str(a1, a2, "Status", "null", (char *)(a3 + 4896), 257); | |
Conf_Dir_Get_Str(a1, a2, "User_Data_Path", "null", (char *)(a3 + 5180), 257); | |
Conf_Dir_Get_Str(a1, a2, "Open_In", "null", (char *)(a3 + 5437), 257); | |
Conf_Dir_Get_Str(a1, a2, "Add_On", "null", (char *)(a3 + 5694), 257); | |
Conf_Dir_Get_Int(a1, a2, "Installed", 1u, (unsigned int *)(a3 + 1028)); | |
Conf_Dir_Get_Int(a1, a2, "Web_Port", 0, (unsigned int *)(a3 + 3860)); | |
Conf_Dir_Get_Int(a1, a2, "Web_SSL_Port", 0xFFFFFFFE, (unsigned int *)v16); | |
Conf_Dir_Get_Int(a1, a2, "Service_Port", 0, (unsigned int *)(a3 + 3864)); | |
Conf_Dir_Get_Int(a1, a2, "Sys_App", 0, (unsigned int *)(a3 + 5164)); | |
if ( *(_DWORD *)(a3 + 5164) == 1 ) | |
v3 = 2; | |
else | |
v3 = 1; | |
Conf_Dir_Get_Int(a1, a2, "Visible", v3, (unsigned int *)(a3 + 5156)); | |
Conf_Dir_Get_Int(a1, a2, "Force_Visible", 3u, (unsigned int *)(a3 + 5160)); | |
Conf_Dir_Get_Int(a1, a2, "Volume_Select", 0, (unsigned int *)(a3 + 6264)); | |
Conf_Dir_Get_Int(a1, a2, "App_Route", 0, (unsigned int *)(a3 + 6784)); | |
Conf_Dir_Get_Str(a1, a2, "App_Route_Rule", (const char *)&unk_2EA9D, (char *)(a3 + 6788), 514); | |
Conf_Dir_Get_Int(a1, a2, "Desktop", 0, (unsigned int *)(a3 + 5168)); | |
Conf_Dir_Get_Int(a1, a2, "Sys_Prohibit", 0, (unsigned int *)(a3 + 10996)); | |
Conf_Dir_Get_Int(a1, a2, "Sys_Prohibit", 0, (unsigned int *)(a3 + 10996)); | |
Conf_Dir_Get_Int(a1, a2, "Use_Proxy", 0, (unsigned int *)(a3 + 11000)); | |
Conf_Dir_Get_Str(a1, a2, "Mig_Status", (const char *)&unk_2EA9D, (char *)(a3 + 7302), 32); | |
Conf_Dir_Get_Str(a1, a2, "Timeout", (const char *)&unk_2EA9D, (char *)(a3 + 10938), 18); | |
Conf_Dir_Get_Str(a1, a2, "Operating_Status", (const char *)&unk_2EA9D, (char *)(a3 + 10956), 32); | |
Conf_Dir_Get_Int(a1, a2, "Official", 1u, (unsigned int *)(a3 + 10992)); | |
Conf_Dir_Get_Int(a1, a2, "Need_Configure", 0, (unsigned int *)(a3 + 11264)); | |
if ( *(int *)(a3 + 5168) <= 0 ) | |
{ | |
*(_DWORD *)(a3 + 5172) = 0; | |
*(_DWORD *)(a3 + 5176) = 0; | |
} | |
else | |
{ | |
Conf_Dir_Get_Int(a1, a2, "Win_Width", 0, (unsigned int *)(a3 + 5172)); | |
Conf_Dir_Get_Int(a1, a2, "Win_Height", 0, (unsigned int *)(a3 + 5176)); | |
Conf_Dir_Get_Int(a1, a2, "Win_Max_Width", 0, (unsigned int *)(a3 + 6248)); | |
Conf_Dir_Get_Int(a1, a2, "Win_Max_Height", 0, (unsigned int *)(a3 + 6252)); | |
Conf_Dir_Get_Int(a1, a2, "Win_Min_Width", 0, (unsigned int *)(a3 + 6256)); | |
Conf_Dir_Get_Int(a1, a2, "Win_Min_Height", 0, (unsigned int *)(a3 + 6260)); | |
} | |
*(_DWORD *)(a3 + 5952) = (*(int *)(a3 + 3860) >= -1 || v16 >= -1) | |
&& *(_BYTE *)(a3 + 2574) == asc_2EE09[0] | |
&& Conf_Dir_Get_Int(a1, a2, "Login_Screen", 0, 0LL) == 1; | |
Conf_Dir_Get_Str(a1, a2, "Build", "null", (char *)(a3 + 5956), 32); | |
Conf_Dir_Get_Str(a1, a2, "Alt_Shell", "null", (char *)(a3 + 5988), 257); | |
Conf_Dir_Get_Str(a1, a2, "Task_Info", (const char *)&unk_2EA9D, (char *)(a3 + 7334), 514); | |
Conf_Dir_Get_Str(a1, a2, "FW_Ver_Min", "null", (char *)(a3 + 7848), 257); | |
Conf_Dir_Get_Str(a1, a2, "FW_Ver_Max", "null", (char *)(a3 + 8105), 257); | |
Conf_Dir_Get_Str(a1, a2, "Dependency", (const char *)&unk_2EA9D, v10, 2571); | |
src = strtok(v10, delim); | |
while ( src ) | |
{ | |
if ( *src ) | |
{ | |
strncpy((char *)(257LL * v19++ + 8368 + a3), src, 0x100uLL); | |
src = strtok(0LL, delim); | |
} | |
} | |
*(_DWORD *)(a3 + 8364) = v19; | |
if ( !strcmp((const char *)(a3 + 3602), "null") || !*(_BYTE *)(a3 + 3602) ) | |
{ | |
if ( !*(_DWORD *)(a3 + 10988) ) | |
{ | |
*(_DWORD *)(a3 + 10988) = 1; | |
if ( (!strcmp((const char *)(a3 + 4896), "queue") | |
|| !strcmp((const char *)(a3 + 4896), "download") | |
|| !strcmp((const char *)(a3 + 4896), "install") | |
|| !strcmp((const char *)(a3 + 4896), "fail") | |
|| !strcmp((const char *)(a3 + 4896), "cancel")) | |
&& !strcmp((const char *)(a3 + 1289), "null") | |
&& !strcmp((const char *)(a3 + 5988), "null") ) | |
{ | |
*(_DWORD *)(a3 + 10988) = 0; | |
} | |
} | |
if ( *(_DWORD *)(a3 + 10988) == 1 ) | |
{ | |
*(_QWORD *)nptr = 0LL; | |
v7 = 0LL; | |
v8 = 0LL; | |
v9 = 0LL; | |
v14 = -1; | |
v13 = -1; | |
GetPrivateProfileString((__int64)a2, (__int64)"stcode", "-1", nptr, 32, (__int64)"/etc/config/qpkg_job.conf"); | |
v13 = atoi(nptr); | |
GetPrivateProfileString((__int64)a2, (__int64)"opcode", "-1", nptr, 32, (__int64)"/etc/config/qpkg_job.conf"); | |
v14 = atoi(nptr); | |
if ( v14 == 1 && v13 == 4 ) | |
*(_DWORD *)(a3 + 10988) = 0; | |
} | |
} | |
Conf_Dir_Get_Str(a1, a2, "Role_Delegation", "null", (char *)(a3 + 11004), 257); | |
return 0LL; | |
} | |
// 235340: using guessed type char *qpkg_display_name[12]; | |
//----- (000000000001F8BD) ---------------------------------------------------- | |
__int64 __fastcall sub_1F8BD(__int64 a1) | |
{ | |
char **v2; // rbx | |
char **v3; // rbx | |
unsigned int v4; // eax | |
char **v5; // rbx | |
char **v6; // rbx | |
char s[8]; // [rsp+10h] [rbp-130h] BYREF | |
char v8[248]; // [rsp+18h] [rbp-128h] BYREF | |
unsigned int v9; // [rsp+11Ch] [rbp-24h] | |
int j; // [rsp+120h] [rbp-20h] | |
int v11; // [rsp+124h] [rbp-1Ch] | |
_BOOL4 v12; // [rsp+128h] [rbp-18h] | |
unsigned int i; // [rsp+12Ch] [rbp-14h] | |
i = 0; | |
v9 = 0; | |
*(_QWORD *)s = 0LL; | |
memset(v8, 0, sizeof(v8)); | |
if ( !a1 ) | |
return 0LL; | |
for ( i = 0; *(_DWORD *)(a1 + 1032) > (signed int)i; ++i ) | |
{ | |
v11 = 0; | |
s[0] = 0; | |
v12 = **(_BYTE **)(8LL * (int)i + *(_QWORD *)(a1 + 1048)) == 0; | |
if ( Conf_Dir_Get_Str(a1, *(const char **)(8LL * (int)i + *(_QWORD *)(a1 + 1048)), "Name", 0LL, s, 256) ) | |
{ | |
if ( !s[0] ) | |
v11 = 1; | |
} | |
else | |
{ | |
v11 = 1; | |
} | |
if ( v12 && !v11 ) | |
{ | |
Conf_Dir_Set_Str(a1, *(const char **)(8LL * (int)i + *(_QWORD *)(a1 + 1048)), "Name", (const char *)&unk_2EA9D); | |
for ( j = 0; *(_DWORD *)(a1 + 1028) > j; ++j ) | |
{ | |
if ( *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1056)) | |
&& !strcasecmp( | |
*(const char **)(8LL * j + *(_QWORD *)(a1 + 1056)), | |
*(const char **)(8LL * (int)i + *(_QWORD *)(a1 + 1048))) ) | |
{ | |
free(*(void **)(8LL * j + *(_QWORD *)(a1 + 1056))); | |
v2 = (char **)(*(_QWORD *)(a1 + 1056) + 8LL * j); | |
*v2 = strdup(s); | |
} | |
} | |
free(*(void **)(8LL * (int)i + *(_QWORD *)(a1 + 1048))); | |
v3 = (char **)(*(_QWORD *)(a1 + 1048) + 8LL * (int)i); | |
*v3 = strdup(s); | |
v9 = 1; | |
} | |
if ( v12 && v11 ) | |
{ | |
v4 = getpid(); | |
snprintf(s, 0x100uLL, "%d%d", v4, i); | |
for ( j = 0; *(_DWORD *)(a1 + 1028) > j; ++j ) | |
{ | |
if ( *(_QWORD *)(8LL * j + *(_QWORD *)(a1 + 1056)) ) | |
{ | |
if ( !strcasecmp( | |
*(const char **)(8LL * j + *(_QWORD *)(a1 + 1056)), | |
*(const char **)(8LL * (int)i + *(_QWORD *)(a1 + 1048))) ) | |
{ | |
free(*(void **)(8LL * j + *(_QWORD *)(a1 + 1056))); | |
v5 = (char **)(*(_QWORD *)(a1 + 1056) + 8LL * j); | |
*v5 = strdup(s); | |
} | |
} | |
} | |
free(*(void **)(8LL * (int)i + *(_QWORD *)(a1 + 1048))); | |
v6 = (char **)(*(_QWORD *)(a1 + 1048) + 8LL * (int)i); | |
*v6 = strdup(s); | |
v9 = 1; | |
} | |
} | |
return v9; | |
} | |
//----- (000000000001FD18) ---------------------------------------------------- | |
__int64 __fastcall Get_All_QPKG_Info(void **a1) | |
{ | |
struct stat64 stat_buf; // [rsp+10h] [rbp-2CC0h] BYREF | |
char src[11272]; // [rsp+A0h] [rbp-2C30h] BYREF | |
char *v4; // [rsp+2CA8h] [rbp-28h] | |
int One_QPKG_Info_Dir; // [rsp+2CB4h] [rbp-1Ch] | |
char *v6; // [rsp+2CB8h] [rbp-18h] | |
int i; // [rsp+2CC0h] [rbp-10h] | |
unsigned int v8; // [rsp+2CC4h] [rbp-Ch] | |
void *ptr; // [rsp+2CC8h] [rbp-8h] | |
ptr = 0LL; | |
One_QPKG_Info_Dir = -1; | |
v8 = 0; | |
v4 = 0LL; | |
if ( sub_2D9F0("/etc/config/qpkg.conf", &stat_buf) ) | |
return 0xFFFFFFFFLL; | |
v6 = Conf_Dir_Load("/etc/config/qpkg.conf"); | |
if ( !v6 ) | |
return 0LL; | |
if ( (unsigned int)sub_1F8BD((__int64)v6) ) | |
{ | |
Conf_Dir_Wirte_File(v6); | |
Conf_Dir_Free((__int64)v6); | |
v6 = Conf_Dir_Load("/etc/config/qpkg.conf"); | |
if ( !v6 ) | |
return 0LL; | |
} | |
for ( i = 0; ; ++i ) | |
{ | |
if ( *((_DWORD *)v6 + 258) <= i ) | |
{ | |
Conf_Dir_Free((__int64)v6); | |
*a1 = ptr; | |
return v8; | |
} | |
One_QPKG_Info_Dir = Get_One_QPKG_Info_Dir(v6, *(_QWORD *)(8LL * i + *((_QWORD *)v6 + 131)), src); | |
if ( One_QPKG_Info_Dir >= 0 ) | |
break; | |
LABEL_17: | |
; | |
} | |
v4 = (char *)realloc(ptr, 11268LL * (int)(v8 + 1)); | |
if ( v4 ) | |
{ | |
ptr = v4; | |
memcpy(&v4[11268 * v8++], src, 0x2C04uLL); | |
goto LABEL_17; | |
} | |
if ( ptr ) | |
free(ptr); | |
if ( v6 ) | |
Conf_Dir_Free((__int64)v6); | |
return 4294967286LL; | |
} | |
// A520: using guessed type __int64 __fastcall Get_One_QPKG_Info_Dir(_QWORD, _QWORD, _QWORD); | |
// A5B0: using guessed type __int64 __fastcall Conf_Dir_Wirte_File(_QWORD); | |
//----- (000000000001FEE6) ---------------------------------------------------- | |
_BOOL8 __fastcall Is_QPKG_Installed(__int64 a1) | |
{ | |
char s1[272]; // [rsp+10h] [rbp-110h] BYREF | |
GetPrivateProfileString(a1, (__int64)"Name", "null", s1, 257, (__int64)"/etc/config/qpkg.conf"); | |
return s1[0] && strcmp(s1, "null"); | |
} | |
//----- (000000000001FF62) ---------------------------------------------------- | |
_BOOL8 __fastcall Is_SYS_QPKG_Removed(const char *a1) | |
{ | |
struct stat64 stat_buf; // [rsp+10h] [rbp-1A0h] BYREF | |
char s[272]; // [rsp+A0h] [rbp-110h] BYREF | |
sprintf(s, "%s/.%s_removed", "/mnt/HDA_ROOT/update_pkg", a1); | |
return !sub_2D9E0(s, &stat_buf) && !Is_QPKG_Installed((__int64)a1); | |
} | |
//----- (000000000001FFDE) ---------------------------------------------------- | |
__int64 __fastcall Set_QPKG_Disable_by_Default(const char *a1) | |
{ | |
char s[264]; // [rsp+10h] [rbp-110h] BYREF | |
FILE *stream; // [rsp+118h] [rbp-8h] | |
sprintf(s, "%s/.%s_disabled", "/mnt/HDA_ROOT/update_pkg", a1); | |
stream = fopen64(s, "w"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
fclose(stream); | |
return 0LL; | |
} | |
//----- (0000000000020057) ---------------------------------------------------- | |
__int64 __fastcall Unset_QPKG_Disable_by_Default(const char *a1) | |
{ | |
struct stat64 stat_buf; // [rsp+10h] [rbp-1A0h] BYREF | |
char s[272]; // [rsp+A0h] [rbp-110h] BYREF | |
sprintf(s, "%s/.%s_disabled", "/mnt/HDA_ROOT/update_pkg", a1); | |
if ( !sub_2D9E0(s, &stat_buf) ) | |
unlink(s); | |
return 0LL; | |
} | |
//----- (00000000000200C8) ---------------------------------------------------- | |
__int64 Get_EEPROM_Hwaddr() | |
{ | |
return 0xFFFFFFFFLL; | |
} | |
// 200C8: using guessed type __int64 Get_EEPROM_Hwaddr(); | |
//----- (00000000000200E3) ---------------------------------------------------- | |
__int64 __fastcall Get_Eth_Magic_Num(const char *a1, int *a2) | |
{ | |
char buf[32]; // [rsp+10h] [rbp-230h] BYREF | |
char s[512]; // [rsp+30h] [rbp-210h] BYREF | |
int v5; // [rsp+230h] [rbp-10h] | |
int v6; // [rsp+234h] [rbp-Ch] | |
int v7; // [rsp+238h] [rbp-8h] | |
int fd; // [rsp+23Ch] [rbp-4h] | |
snprintf(s, 0x200uLL, "/sys/class/net/%s/device/vendor", a1); | |
fd = open64(s, 0); | |
if ( fd < 0 ) | |
return 0xFFFFFFFFLL; | |
v7 = read(fd, buf, 0x20uLL); | |
if ( v7 <= 0 ) | |
goto LABEL_4; | |
close(fd); | |
v6 = strtol(buf, 0LL, 0); | |
snprintf(s, 0x200uLL, "/sys/class/net/%s/device/device", a1); | |
fd = open64(s, 0); | |
if ( fd < 0 ) | |
return 0xFFFFFFFFLL; | |
v7 = read(fd, buf, 0x20uLL); | |
if ( v7 <= 0 ) | |
{ | |
LABEL_4: | |
close(fd); | |
return 0xFFFFFFFFLL; | |
} | |
close(fd); | |
v5 = strtol(buf, 0LL, 0); | |
*a2 = v6 | (v5 << 16); | |
return 0LL; | |
} | |
//----- (0000000000020281) ---------------------------------------------------- | |
__int64 Set_EEPROM_Hwaddr() | |
{ | |
return 0xFFFFFFFFLL; | |
} | |
// 20281: using guessed type __int64 Set_EEPROM_Hwaddr(); | |
//----- (0000000000020299) ---------------------------------------------------- | |
__int64 Reset_EEPROM_To_Default() | |
{ | |
return 0xFFFFFFFFLL; | |
} | |
// 20299: using guessed type __int64 Reset_EEPROM_To_Default(); | |
//----- (00000000000202AD) ---------------------------------------------------- | |
_BOOL8 __fastcall sub_202AD(_BYTE *a1) | |
{ | |
int s2; // [rsp+10h] [rbp-10h] BYREF | |
__int16 v3; // [rsp+14h] [rbp-Ch] | |
s2 = 0; | |
v3 = 0; | |
return (*a1 & 1) == 0 && memcmp(a1, &s2, 6uLL); | |
} | |
//----- (0000000000020301) ---------------------------------------------------- | |
__int64 Is_Needed_Reset_EEPRM() | |
{ | |
return 0LL; | |
} | |
// 20301: using guessed type __int64 Is_Needed_Reset_EEPRM(); | |
//----- (0000000000020315) ---------------------------------------------------- | |
__int64 __fastcall Get_Firmware_MD5_Checksum(char *a1, int a2) | |
{ | |
char s[264]; // [rsp+10h] [rbp-120h] BYREF | |
char *s1; // [rsp+118h] [rbp-18h] | |
char *delim; // [rsp+120h] [rbp-10h] | |
unsigned int Flash_Config; // [rsp+12Ch] [rbp-4h] | |
delim = "="; | |
s1 = 0LL; | |
Flash_Config = -1; | |
Flash_Config = Get_Flash_Config(7341088LL, 0x24u, (__int64)s); | |
s[36] = 0; | |
if ( !Flash_Config ) | |
{ | |
Flash_Config = -1; | |
s1 = strtok(s, delim); | |
if ( s1 ) | |
{ | |
if ( !strncmp(s1, "MD5", 3uLL) ) | |
{ | |
s1 = strtok(0LL, delim); | |
if ( a2 > 31 ) | |
{ | |
strncpy(a1, s1, 0x20uLL); | |
return 0; | |
} | |
} | |
} | |
} | |
return Flash_Config; | |
} | |
//----- (00000000000203FD) ---------------------------------------------------- | |
__int64 __fastcall Set_Firmware_MD5_Checksum(const char *a1) | |
{ | |
char s[268]; // [rsp+10h] [rbp-110h] BYREF | |
unsigned int v3; // [rsp+11Ch] [rbp-4h] | |
v3 = -1; | |
sprintf(s, "MD5=%s", a1); | |
if ( strlen(s) == 36 ) | |
return (unsigned int)Set_Flash_Config(7341088LL, (__int64)s); | |
return v3; | |
} | |
//----- (0000000000020469) ---------------------------------------------------- | |
__int64 __fastcall Get_Firmware_Checksum(char *a1, int a2) | |
{ | |
char s[264]; // [rsp+10h] [rbp-120h] BYREF | |
char *s1; // [rsp+118h] [rbp-18h] | |
char *delim; // [rsp+120h] [rbp-10h] | |
unsigned int Flash_Config; // [rsp+12Ch] [rbp-4h] | |
delim = "="; | |
s1 = 0LL; | |
Flash_Config = -1; | |
Flash_Config = Get_Flash_Config(7341088LL, 0x40u, (__int64)s); | |
s[64] = 0; | |
if ( !Flash_Config ) | |
{ | |
Flash_Config = -1; | |
s1 = strtok(s, delim); | |
if ( s1 ) | |
{ | |
if ( !strncmp(s1, "CKSUM", 5uLL) ) | |
{ | |
s1 = strtok(0LL, delim); | |
if ( a2 > 57 ) | |
{ | |
strncpy(a1, s1, 0x3AuLL); | |
return 0; | |
} | |
} | |
} | |
} | |
return Flash_Config; | |
} | |
//----- (0000000000020551) ---------------------------------------------------- | |
__int64 __fastcall Set_Firmware_Checksum(const char *a1) | |
{ | |
char s[268]; // [rsp+10h] [rbp-110h] BYREF | |
unsigned int v3; // [rsp+11Ch] [rbp-4h] | |
v3 = -1; | |
sprintf(s, "CKSUM=%s=", a1); | |
if ( strlen(s) <= 0x3F ) | |
return (unsigned int)Set_Flash_Config(7341088LL, (__int64)s); | |
return v3; | |
} | |
//----- (00000000000205BD) ---------------------------------------------------- | |
_BOOL8 __fastcall IS_IPv4_Address(const char *a1) | |
{ | |
char dest[128]; // [rsp+10h] [rbp-90h] BYREF | |
char buf[12]; // [rsp+90h] [rbp-10h] BYREF | |
memset(dest, 0, sizeof(dest)); | |
strncpy(dest, a1, 0x7FuLL); | |
return inet_pton(2, dest, buf) > 0; | |
} | |
// 205BD: using guessed type char buf[12]; | |
//----- (0000000000020633) ---------------------------------------------------- | |
_BOOL8 __fastcall IS_IPv6_Address(const char *a1) | |
{ | |
char buf[28]; // [rsp+10h] [rbp-20h] BYREF | |
return a1 && inet_pton(10, a1, buf) > 0; | |
} | |
// 20633: using guessed type char buf[28]; | |
//----- (0000000000020679) ---------------------------------------------------- | |
__int64 sub_20679() | |
{ | |
char s[272]; // [rsp+0h] [rbp-120h] BYREF | |
FILE *stream; // [rsp+110h] [rbp-10h] | |
__int64 v3; // [rsp+118h] [rbp-8h] | |
v3 = 0LL; | |
stream = fopen64("/tmp/ms_external_ip.time", "r"); | |
if ( stream ) | |
{ | |
memset(s, 0, 0x101uLL); | |
fgets(s, 257, stream); | |
v3 = atol(s); | |
fclose(stream); | |
} | |
return v3; | |
} | |
//----- (0000000000020700) ---------------------------------------------------- | |
__int64 __fastcall sub_20700(__int64 a1) | |
{ | |
char s[264]; // [rsp+10h] [rbp-110h] BYREF | |
FILE *stream; // [rsp+118h] [rbp-8h] | |
stream = fopen64("/tmp/ms_external_ip.time", "w"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
sprintf(s, "%ld", a1); | |
fputs(s, stream); | |
fclose(stream); | |
return 0LL; | |
} | |
//----- (0000000000020782) ---------------------------------------------------- | |
__int64 __fastcall sub_20782(char *a1, int a2) | |
{ | |
int v3; // [rsp+1Ch] [rbp-14h] | |
FILE *stream; // [rsp+20h] [rbp-10h] | |
stream = fopen64("/tmp/ms_external_ip", "r"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
if ( fgets(a1, a2, stream) ) | |
{ | |
v3 = strlen(a1) - 1; | |
if ( v3 > 0 && (a1[v3] == 10 || a1[v3] == 13) ) | |
a1[v3] = 0; | |
} | |
pclose(stream); | |
return 0LL; | |
} | |
//----- (0000000000020846) ---------------------------------------------------- | |
__int64 __fastcall sub_20846(const char *a1) | |
{ | |
FILE *stream; // [rsp+18h] [rbp-8h] | |
stream = fopen64("/tmp/ms_external_ip", "w"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
if ( a1 ) | |
fputs(a1, stream); | |
fclose(stream); | |
return 0LL; | |
} | |
//----- (00000000000208A4) ---------------------------------------------------- | |
__kernel_long_t sub_208A4() | |
{ | |
struct sysinfo v1; // [rsp+0h] [rbp-70h] BYREF | |
if ( sysinfo(&v1) ) | |
return 0LL; | |
else | |
return v1.uptime; | |
} | |
//----- (00000000000208C9) ---------------------------------------------------- | |
__int64 __fastcall Get_External_IP(char *a1, int a2) | |
{ | |
int v3; // [rsp+14h] [rbp-2Ch] | |
__int64 v4; // [rsp+18h] [rbp-28h] | |
__int64 v5; // [rsp+28h] [rbp-18h] | |
FILE *stream; // [rsp+30h] [rbp-10h] | |
unsigned int v7; // [rsp+3Ch] [rbp-4h] | |
v7 = 0; | |
v4 = sub_208A4(); | |
v5 = sub_20679(); | |
if ( (unsigned __int64)(v4 - v5) > 0x707 || v5 <= 0 ) | |
{ | |
stream = popen("/etc/init.d/get_external_ip.sh", "r"); | |
if ( stream ) | |
{ | |
if ( fgets(a1, a2, stream) ) | |
{ | |
v3 = strlen(a1) - 1; | |
if ( v3 > 0 ) | |
{ | |
if ( a1[v3] == 10 || a1[v3] == 13 ) | |
a1[v3] = 0; | |
if ( !(unsigned int)sub_20846(a1) ) | |
sub_20700(v4); | |
} | |
} | |
else | |
{ | |
v7 = -2; | |
} | |
pclose(stream); | |
return v7; | |
} | |
else | |
{ | |
return 0xFFFFFFFFLL; | |
} | |
} | |
else | |
{ | |
sub_20782(a1, a2); | |
return 0LL; | |
} | |
} | |
//----- (0000000000020A13) ---------------------------------------------------- | |
__int64 __fastcall Get_Multimedia_Share_Path(char *a1) | |
{ | |
char v2[272]; // [rsp+10h] [rbp-220h] BYREF | |
char src[272]; // [rsp+120h] [rbp-110h] BYREF | |
Get_Private_Profile_String( | |
(__int64)"SHARE_DEF", | |
(__int64)"defMultimedia", | |
"Qmultimedia", | |
v2, | |
257, | |
(__int64)"/etc/config/def_share.info"); | |
Get_Private_Profile_String( | |
(__int64)v2, | |
(__int64)"path", | |
"/share/Qmultimedia", | |
src, | |
257, | |
(__int64)"/etc/config/smb.conf"); | |
strncpy(a1, src, 0x101uLL); | |
return 0LL; | |
} | |
//----- (0000000000020AAF) ---------------------------------------------------- | |
_BOOL8 __fastcall Is_Sound_Card_Playback_Running(unsigned int a1) | |
{ | |
char s[272]; // [rsp+10h] [rbp-110h] BYREF | |
sprintf(s, "/bin/cat /proc/asound/card%d/pcm0p/sub0/status | /bin/grep RUNNING 1>>/dev/null 2>>/dev/null", a1); | |
return system(s) == 0; | |
} | |
//----- (0000000000020B02) ---------------------------------------------------- | |
__int64 Stop_Local_Audio_Playback() | |
{ | |
char s[268]; // [rsp+0h] [rbp-110h] BYREF | |
int v2; // [rsp+10Ch] [rbp-4h] | |
v2 = 0; | |
sprintf( | |
s, | |
"/bin/kill `/bin/ps | /bin/grep -v grep | /bin/grep %s | /bin/awk '{print $1}'` 1>/dev/null 2>/dev/null", | |
"Music_D_Play"); | |
v2 = system(s); | |
usleep(0x186A0u); | |
if ( Is_Sound_Card_Playback_Running(0) && (v2 = system(s), usleep(0x493E0u), Is_Sound_Card_Playback_Running(0)) ) | |
return 0xFFFFFFFFLL; | |
else | |
return 0LL; | |
} | |
// 20B02: using guessed type __int64 Stop_Local_Audio_Playback(); | |
//----- (0000000000020B98) ---------------------------------------------------- | |
_BOOL8 Is_Local_Audio_Playing() | |
{ | |
char s[268]; // [rsp+0h] [rbp-110h] BYREF | |
int v2; // [rsp+10Ch] [rbp-4h] | |
v2 = 0; | |
sprintf(s, "/bin/ps | /bin/grep -v grep | /bin/grep %s 1>/dev/null 2>/dev/null", "Music_D_Play"); | |
return system(s) == 0; | |
} | |
//----- (0000000000020BF2) ---------------------------------------------------- | |
__int64 __fastcall Get_One_Audio_Alarm_Info(unsigned int a1, __int64 a2) | |
{ | |
int v3; // ebx | |
char nptr[16]; // [rsp+10h] [rbp-140h] BYREF | |
char v5[272]; // [rsp+20h] [rbp-130h] BYREF | |
char *v6; // [rsp+130h] [rbp-20h] | |
unsigned int v7; // [rsp+138h] [rbp-18h] | |
int i; // [rsp+13Ch] [rbp-14h] | |
i = 1; | |
v7 = -1; | |
sprintf((char *)a2, "%s%d", "ALARM_", a1); | |
*(_DWORD *)(a2 + 260) = a1; | |
v6 = Conf_Dir_Load("/tmp/.alarm_info.conf"); | |
if ( !v6 ) | |
return v7; | |
Conf_Dir_Get_Str((__int64)v6, (const char *)a2, "Desc", "null", (char *)(a2 + 264), 257); | |
Conf_Dir_Get_Str((__int64)v6, (const char *)a2, "Time", "null", (char *)(a2 + 568), 257); | |
Conf_Dir_Get_Str((__int64)v6, (const char *)a2, "Dir_Path", "null", (char *)(a2 + 832), 257); | |
Conf_Dir_Get_Str((__int64)v6, (const char *)a2, "File_Path", "null", (char *)(a2 + 4928), 257); | |
Conf_Dir_Get_Str((__int64)v6, (const char *)a2, "WeekDay", "0,0,0,0,0,0,0", v5, 257); | |
Conf_Dir_Get_Int((__int64)v6, (const char *)a2, "Enable", 0, (unsigned int *)(a2 + 524)); | |
Conf_Dir_Get_Int((__int64)v6, (const char *)a2, "Offset", 0, (unsigned int *)(a2 + 528)); | |
Conf_Dir_Get_Int((__int64)v6, (const char *)a2, "Volume", 0x14u, (unsigned int *)(a2 + 532)); | |
Conf_Dir_Get_Int((__int64)v6, (const char *)a2, "Mode", 1u, (unsigned int *)(a2 + 536)); | |
Conf_Dir_Get_Int((__int64)v6, (const char *)a2, "Pl_ID", 0, (unsigned int *)(a2 + 828)); | |
Conf_Dir_Get_Str((__int64)v6, (const char *)a2, "Device_ID", "null", (char *)(a2 + 9024), 100); | |
Conf_Dir_Get_Str((__int64)v6, (const char *)a2, "API_Type", "null", (char *)(a2 + 9124), 20); | |
for ( i = 1; (int)Get_String_Field((__int64)v5, i, 44, nptr, 3) >= 0 && i <= 7; ++i ) | |
{ | |
if ( nptr[0] ) | |
{ | |
v3 = i - 1; | |
*(_DWORD *)(a2 + 4 * (v3 + 132LL) + 12) = atoi(nptr); | |
} | |
else | |
{ | |
*(_DWORD *)(a2 + 4 * (i - 1 + 132LL) + 12) = 0; | |
} | |
} | |
Conf_Dir_Free((__int64)v6); | |
return 0LL; | |
} | |
//----- (0000000000020FA3) ---------------------------------------------------- | |
__int64 __fastcall Set_One_Audio_Alarm_Info(__int64 a1) | |
{ | |
char s[264]; // [rsp+10h] [rbp-110h] BYREF | |
char *v3; // [rsp+118h] [rbp-8h] | |
v3 = Conf_Dir_Load("/tmp/.alarm_info.conf"); | |
if ( !v3 ) | |
return 0xFFFFFFFFLL; | |
sprintf( | |
s, | |
"%d,%d,%d,%d,%d,%d,%d", | |
*(unsigned int *)(a1 + 540), | |
*(unsigned int *)(a1 + 544), | |
*(unsigned int *)(a1 + 548), | |
*(unsigned int *)(a1 + 552), | |
*(unsigned int *)(a1 + 556), | |
*(unsigned int *)(a1 + 560), | |
*(unsigned int *)(a1 + 564)); | |
Conf_Dir_Set_Int((__int64)v3, (const char *)a1, "Number", *(_DWORD *)(a1 + 260)); | |
Conf_Dir_Set_Int((__int64)v3, (const char *)a1, "Enable", *(_DWORD *)(a1 + 524)); | |
Conf_Dir_Set_Int((__int64)v3, (const char *)a1, "Offset", *(_DWORD *)(a1 + 528)); | |
Conf_Dir_Set_Int((__int64)v3, (const char *)a1, "Volume", *(_DWORD *)(a1 + 532)); | |
Conf_Dir_Set_Int((__int64)v3, (const char *)a1, "Pl_ID", *(_DWORD *)(a1 + 828)); | |
Conf_Dir_Set_Int((__int64)v3, (const char *)a1, "Mode", *(_DWORD *)(a1 + 536)); | |
Conf_Dir_Set_Str((__int64)v3, (const char *)a1, "WeekDay", s); | |
Conf_Dir_Set_Str((__int64)v3, (const char *)a1, "Time", (const char *)(a1 + 568)); | |
Conf_Dir_Set_Str((__int64)v3, (const char *)a1, "Dir_Path", (const char *)(a1 + 832)); | |
Conf_Dir_Set_Str((__int64)v3, (const char *)a1, "File_Path", (const char *)(a1 + 4928)); | |
Conf_Dir_Set_Str((__int64)v3, (const char *)a1, "Desc", (const char *)(a1 + 264)); | |
Conf_Dir_Wirte_File(v3); | |
Conf_Dir_Free((__int64)v3); | |
return 0LL; | |
} | |
// A5B0: using guessed type __int64 __fastcall Conf_Dir_Wirte_File(_QWORD); | |
//----- (0000000000021243) ---------------------------------------------------- | |
size_t __fastcall remove_tail_linefeed(const char *a1) | |
{ | |
size_t result; // rax | |
int v2; // [rsp+1Ch] [rbp-4h] | |
result = strlen(a1); | |
v2 = result; | |
while ( v2 > 0 ) | |
{ | |
if ( a1[--v2] != 13 ) | |
{ | |
result = (unsigned __int8)a1[v2]; | |
if ( (_BYTE)result != 10 ) | |
break; | |
} | |
result = (size_t)&a1[v2]; | |
*(_BYTE *)result = 0; | |
} | |
return result; | |
} | |
//----- (00000000000212A8) ---------------------------------------------------- | |
_BYTE *__fastcall trim_newline_carriage(__int64 a1) | |
{ | |
_BYTE *result; // rax | |
int i; // [rsp+14h] [rbp-4h] | |
if ( a1 ) | |
{ | |
for ( i = 0; ; ++i ) | |
{ | |
result = (_BYTE *)*(unsigned __int8 *)(i + a1); | |
if ( !(_BYTE)result ) | |
break; | |
if ( *(_BYTE *)(i + a1) == 10 || *(_BYTE *)(i + a1) == 13 ) | |
{ | |
result = (_BYTE *)(i + a1); | |
*result = 0; | |
return result; | |
} | |
} | |
} | |
return result; | |
} | |
//----- (000000000002131D) ---------------------------------------------------- | |
_BYTE *__fastcall escape_str(const char *a1) | |
{ | |
size_t v1; // rax | |
int v3; // eax | |
_BYTE *v4; // [rsp+10h] [rbp-10h] | |
int v5; // [rsp+18h] [rbp-8h] | |
int v6; // [rsp+1Ch] [rbp-4h] | |
if ( !a1 ) | |
__assert_fail("filename", "normalutil.c", 0xDFBu, "escape_str"); | |
v1 = strlen(a1); | |
v4 = malloc(2 * v1 + 1); | |
if ( !v4 ) | |
return 0LL; | |
v6 = 0; | |
v5 = 0; | |
while ( a1[v6] ) | |
{ | |
v3 = a1[v6]; | |
if ( v3 == 36 ) | |
goto LABEL_12; | |
if ( v3 > 36 ) | |
{ | |
if ( v3 == 92 || v3 == 96 ) | |
LABEL_12: | |
v4[v5++] = 92; | |
} | |
else if ( v3 == 34 ) | |
{ | |
goto LABEL_12; | |
} | |
v4[v5++] = a1[v6++]; | |
} | |
v4[v5] = 0; | |
return v4; | |
} | |
//----- (0000000000021422) ---------------------------------------------------- | |
__int64 __fastcall Get_Serial_Number(char *a1, int a2) | |
{ | |
char s1[12]; // [rsp+10h] [rbp-110h] BYREF | |
int v4; // [rsp+1Ch] [rbp-104h] | |
char v5[241]; // [rsp+20h] [rbp-100h] BYREF | |
int Field; // [rsp+11Ch] [rbp-4h] | |
strcpy(s1, "QNAP0000NO"); | |
s1[11] = 0; | |
v4 = 0; | |
memset(v5, 0, sizeof(v5)); | |
Field = 0; | |
Field = Conf_Get_Field( | |
(__int64)"/var/hw_serial_number", | |
(__int64)"Hardware", | |
(__int64)"serial number", | |
(__int64)s1, | |
0x101u); | |
if ( Field && !system("/sbin/get_hwsn 1>>/dev/null 2>&1") ) | |
Field = Conf_Get_Field( | |
(__int64)"/var/hw_serial_number", | |
(__int64)"Hardware", | |
(__int64)"serial number", | |
(__int64)s1, | |
0x101u); | |
if ( !Field && s1[0] && strcmp(s1, "null") && s1[0] == 81 && strlen(s1) == 10 ) | |
{ | |
strncpy(a1, s1, a2); | |
return 0LL; | |
} | |
else | |
{ | |
strcpy(a1, "QNAP0000NO"); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (00000000000215D6) ---------------------------------------------------- | |
__int64 __fastcall Get_Mac_Address(char *a1, int a2) | |
{ | |
char v3[260]; // [rsp+10h] [rbp-110h] BYREF | |
int Field; // [rsp+114h] [rbp-Ch] | |
int v5; // [rsp+118h] [rbp-8h] | |
int i; // [rsp+11Ch] [rbp-4h] | |
i = 0; | |
v5 = 0; | |
Field = 0; | |
strcpy(v3, "00:00:00:00:05:09"); | |
memset(&v3[18], 0, 239); | |
if ( a2 > 12 ) | |
{ | |
Field = Conf_Get_Field((__int64)"/var/MacAddress", (__int64)"MAC", (__int64)"eth0", (__int64)v3, 0x101u); | |
if ( !Field ) | |
{ | |
for ( i = 0; i <= 256; ++i ) | |
{ | |
if ( v3[i] != 58 ) | |
{ | |
if ( !v3[i] ) | |
{ | |
a1[v5] = 0; | |
break; | |
} | |
a1[v5++] = v3[i]; | |
} | |
} | |
} | |
if ( Field || strlen(a1) != 12 ) | |
strncpy(a1, "000000000509", a2); | |
return 0LL; | |
} | |
else | |
{ | |
strncpy(a1, "0", a2); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (0000000000021768) ---------------------------------------------------- | |
__int64 __fastcall Get_Specify_ID(const char *a1, char *a2, int a3) | |
{ | |
char command[512]; // [rsp+20h] [rbp-570h] BYREF | |
char s[272]; // [rsp+220h] [rbp-370h] BYREF | |
char v7[272]; // [rsp+330h] [rbp-260h] BYREF | |
char v8[272]; // [rsp+440h] [rbp-150h] BYREF | |
char templatea[32]; // [rsp+550h] [rbp-40h] BYREF | |
char *v10; // [rsp+570h] [rbp-20h] | |
int fd; // [rsp+57Ch] [rbp-14h] | |
FILE *stream; // [rsp+580h] [rbp-10h] | |
unsigned int v13; // [rsp+58Ch] [rbp-4h] | |
strcpy(templatea, "/tmp/.qbox_nas.XXXXXX"); | |
stream = 0LL; | |
v13 = -1; | |
if ( !a1 ) | |
return 0xFFFFFFFFLL; | |
fd = mkstemp64(templatea); | |
if ( fd < 0 ) | |
return 0xFFFFFFFFLL; | |
close(fd); | |
Get_Mac_Address(v8, 257); | |
Get_Serial_Number(v7, 257); | |
snprintf(s, 0x101uLL, "%s%s%s", v8, v7, a1); | |
stream = fopen64(templatea, "w"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
fputs(s, stream); | |
if ( fclose(stream) && *__errno_location() == 28 ) | |
{ | |
v13 = -1; | |
} | |
else | |
{ | |
snprintf(command, 0x200uLL, "/bin/md5sum \"%s\"", templatea); | |
stream = popen(command, "r"); | |
if ( stream ) | |
{ | |
v10 = fgets(a2, a3, stream); | |
pclose(stream); | |
if ( v10 ) | |
{ | |
v10 = strchr(a2, 32); | |
if ( v10 ) | |
*v10 = 0; | |
v10 = strchr(a2, 10); | |
if ( v10 ) | |
*v10 = 0; | |
v13 = 0; | |
} | |
} | |
} | |
unlink(templatea); | |
return v13; | |
} | |
//----- (00000000000219AD) ---------------------------------------------------- | |
__int64 __fastcall Get_Device_SUID(char *a1, int a2) | |
{ | |
char v3[272]; // [rsp+10h] [rbp-230h] BYREF | |
char s[264]; // [rsp+120h] [rbp-120h] BYREF | |
char *s1; // [rsp+228h] [rbp-18h] | |
char *delim; // [rsp+230h] [rbp-10h] | |
unsigned int Flash_Config; // [rsp+23Ch] [rbp-4h] | |
delim = "="; | |
s1 = 0LL; | |
Flash_Config = -1; | |
memset(s, 0, 0x101uLL); | |
Flash_Config = Get_Flash_Config(7864320LL, 0x25u, (__int64)s); | |
s[37] = 0; | |
if ( !Flash_Config ) | |
{ | |
Flash_Config = -1; | |
s1 = strtok(s, delim); | |
if ( s1 ) | |
{ | |
if ( !strncmp(s1, "SUID", 4uLL) ) | |
{ | |
s1 = strtok(0LL, delim); | |
if ( a2 > 31 ) | |
{ | |
strncpy(a1, s1, 0x20uLL); | |
Flash_Config = 0; | |
} | |
} | |
} | |
} | |
if ( Flash_Config ) | |
{ | |
memset(s, 0, 0x101uLL); | |
if ( !(unsigned int)Get_Flash_Config(8387584LL, 0x25u, (__int64)s) ) | |
{ | |
s1 = strtok(s, delim); | |
if ( s1 ) | |
{ | |
if ( !strncmp(s1, "SUID", 4uLL) ) | |
{ | |
s1 = strtok(0LL, delim); | |
if ( a2 > 31 ) | |
{ | |
memset(v3, 0, 0x101uLL); | |
strncpy(v3, s1, 0x20uLL); | |
Set_Device_SUID(v3); | |
strncpy(a1, s1, 0x20uLL); | |
return 0; | |
} | |
} | |
} | |
} | |
} | |
return Flash_Config; | |
} | |
// 9FC0: using guessed type __int64 __fastcall Set_Device_SUID(_QWORD); | |
//----- (0000000000021BBA) ---------------------------------------------------- | |
__int64 __fastcall Get_Device_SUID_Ex(void *a1, signed int a2) | |
{ | |
unsigned int Device_SUID; // [rsp+1Ch] [rbp-4h] | |
memset(a1, 0, a2); | |
if ( (int)Get_Private_Profile_String( | |
(__int64)&unk_2EA9D, | |
(__int64)"SUID", | |
(const char *)&unk_2EA9D, | |
(char *)a1, | |
a2, | |
(__int64)"/etc/platform.conf") <= 0 | |
&& (Device_SUID = Get_Device_SUID(a1, (unsigned int)a2)) != 0 ) | |
{ | |
return Device_SUID; | |
} | |
else | |
{ | |
return 0LL; | |
} | |
} | |
// A620: using guessed type __int64 __fastcall Get_Device_SUID(_QWORD, _QWORD); | |
//----- (0000000000021C38) ---------------------------------------------------- | |
__int64 __fastcall Set_Device_SUID(const char *a1) | |
{ | |
char s[268]; // [rsp+10h] [rbp-110h] BYREF | |
unsigned int v3; // [rsp+11Ch] [rbp-4h] | |
v3 = -1; | |
memset(s, 0, 0x101uLL); | |
sprintf(s, "%s=%s", "SUID", a1); | |
if ( strlen(s) == 37 ) | |
return (unsigned int)Set_Flash_Config(7864320LL, (__int64)s); | |
return v3; | |
} | |
//----- (0000000000021CC7) ---------------------------------------------------- | |
__int64 Get_Country_Code() | |
{ | |
char dest[272]; // [rsp+0h] [rbp-230h] BYREF | |
char s[264]; // [rsp+110h] [rbp-120h] BYREF | |
char *s1; // [rsp+218h] [rbp-18h] | |
char *delim; // [rsp+220h] [rbp-10h] | |
unsigned int v5; // [rsp+22Ch] [rbp-4h] | |
delim = "="; | |
s1 = 0LL; | |
v5 = 0; | |
if ( !(unsigned int)Get_Flash_Config(7864384LL, 0xCu, (__int64)s) ) | |
{ | |
s[12] = 0; | |
s1 = strtok(s, delim); | |
if ( s1 ) | |
{ | |
if ( !strncmp(s1, "CCODE", 5uLL) ) | |
{ | |
s1 = strtok(0LL, delim); | |
memset(dest, 0, 0x101uLL); | |
strncpy(dest, s1, 6uLL); | |
return (unsigned int)atoi(dest); | |
} | |
} | |
} | |
return v5; | |
} | |
// 21CC7: using guessed type __int64 Get_Country_Code(); | |
//----- (0000000000021DB1) ---------------------------------------------------- | |
__int64 __fastcall Set_Country_Code(int a1) | |
{ | |
unsigned int v2; // [rsp+Ch] [rbp-114h] | |
char s[268]; // [rsp+10h] [rbp-110h] BYREF | |
unsigned int v4; // [rsp+11Ch] [rbp-4h] | |
v2 = a1; | |
v4 = -1; | |
if ( a1 < 0 ) | |
v2 = 0; | |
memset(s, 0, 0x101uLL); | |
sprintf(s, "%s=%06d", "CCODE", v2); | |
if ( strlen(s) == 12 ) | |
return (unsigned int)Set_Flash_Config(7864384LL, (__int64)s); | |
return v4; | |
} | |
//----- (0000000000021E50) ---------------------------------------------------- | |
__int64 __fastcall getCountryCodeIndex(int a1) | |
{ | |
unsigned int v2; // [rsp+Ch] [rbp-8h] | |
unsigned int i; // [rsp+10h] [rbp-4h] | |
v2 = 0; | |
for ( i = 0; *((_QWORD *)&qcountrycode + 4 * (int)i + 1); ++i ) | |
{ | |
if ( *((_DWORD *)&qcountrycode + 8 * (int)i) == a1 ) | |
return i; | |
} | |
return v2; | |
} | |
//----- (0000000000021EB7) ---------------------------------------------------- | |
__int64 __fastcall getCountryCodeIndexByAbbr(const char *a1) | |
{ | |
unsigned int v2; // [rsp+18h] [rbp-8h] | |
unsigned int i; // [rsp+1Ch] [rbp-4h] | |
v2 = 0; | |
for ( i = 0; *((_QWORD *)&qcountrycode + 4 * (int)i + 1); ++i ) | |
{ | |
if ( a1 && !strcmp(a1, *((const char **)&qcountrycode + 4 * (int)i + 1)) ) | |
return i; | |
} | |
return v2; | |
} | |
//----- (0000000000021F3A) ---------------------------------------------------- | |
__int64 __fastcall getFunctionCodeIndex(int a1) | |
{ | |
unsigned int v2; // [rsp+Ch] [rbp-8h] | |
unsigned int i; // [rsp+10h] [rbp-4h] | |
v2 = 0; | |
for ( i = 0; *((_QWORD *)&qfunctioncode + 4 * (int)i + 1); ++i ) | |
{ | |
if ( *((_DWORD *)&qfunctioncode + 8 * (int)i) == a1 ) | |
return i; | |
} | |
return v2; | |
} | |
//----- (0000000000021FA1) ---------------------------------------------------- | |
__int64 __fastcall Get_Model_Prefix(char *a1) | |
{ | |
char s[264]; // [rsp+10h] [rbp-120h] BYREF | |
char *s1; // [rsp+118h] [rbp-18h] | |
char *delim; // [rsp+120h] [rbp-10h] | |
unsigned int Flash_Config; // [rsp+12Ch] [rbp-4h] | |
delim = "="; | |
s1 = 0LL; | |
Flash_Config = -1; | |
memset(s, 0, 0x101uLL); | |
Flash_Config = Get_Flash_Config(7864448LL, 0xBu, (__int64)s); | |
s[11] = 0; | |
if ( !Flash_Config ) | |
{ | |
Flash_Config = -1; | |
s1 = strtok(s, delim); | |
if ( s1 ) | |
{ | |
if ( !strncmp(s1, "MP", 2uLL) ) | |
{ | |
s1 = strtok(0LL, delim); | |
if ( s1 ) | |
{ | |
strncpy(a1, s1, 8uLL); | |
a1[8] = 0; | |
Flash_Config = 0; | |
} | |
} | |
} | |
} | |
if ( Flash_Config ) | |
strncpy(a1, "TS", 8uLL); | |
return Flash_Config; | |
} | |
//----- (00000000000220C9) ---------------------------------------------------- | |
__int64 __fastcall Set_Model_Prefix(const char *a1) | |
{ | |
char s[260]; // [rsp+10h] [rbp-110h] BYREF | |
int v3; // [rsp+114h] [rbp-Ch] | |
unsigned int v4; // [rsp+118h] [rbp-8h] | |
int i; // [rsp+11Ch] [rbp-4h] | |
v4 = -1; | |
i = 0; | |
v3 = 0; | |
memset(s, 0, 0x101uLL); | |
sprintf(s, "%s=%s", "MP", a1); | |
v3 = strlen(s); | |
if ( v3 > 11 ) | |
return v4; | |
for ( i = v3; i <= 11; ++i ) | |
s[i] = 0; | |
return (unsigned int)Set_Flash_Config(7864448LL, (__int64)s); | |
} | |
// 220C9: using guessed type char s[260]; | |
//----- (000000000002218D) ---------------------------------------------------- | |
__int64 __fastcall Get_LED_Night_Mode_Status(_DWORD *a1) | |
{ | |
char v2[8]; // [rsp+10h] [rbp-30h] BYREF | |
char s[8]; // [rsp+20h] [rbp-20h] BYREF | |
char *v4; // [rsp+28h] [rbp-18h] | |
char *v5; // [rsp+30h] [rbp-10h] | |
char *nptr; // [rsp+38h] [rbp-8h] | |
*(_QWORD *)s = 0LL; | |
*(_QWORD *)v2 = 0LL; | |
nptr = 0LL; | |
v5 = 0LL; | |
v4 = Conf_Dir_Load("/etc/config/uLinux.conf"); | |
if ( !v4 ) | |
return 0xFFFFFFFFLL; | |
Conf_Dir_Get_Bool((__int64)v4, "LED", "LED Enable", 1, a1); | |
Conf_Dir_Get_Int((__int64)v4, "LED", "LED Brightness Value", 0x64u, a1 + 1); | |
Conf_Dir_Get_Bool((__int64)v4, "LED", "LED Time Period", 0, a1 + 2); | |
if ( a1[2] == 1 ) | |
{ | |
Conf_Dir_Get_Str((__int64)v4, "LED", "LED Start Time", "00:00", s, 8); | |
Conf_Dir_Get_Str((__int64)v4, "LED", "LED End Time", "23:59", v2, 8); | |
nptr = strtok(s, ":"); | |
if ( nptr ) | |
a1[3] = atoi(nptr); | |
nptr = strtok(0LL, ":"); | |
if ( nptr ) | |
a1[4] = atoi(nptr); | |
v5 = strtok(v2, ":"); | |
if ( v5 ) | |
a1[5] = atoi(v5); | |
v5 = strtok(0LL, ":"); | |
if ( v5 ) | |
a1[6] = atoi(v5); | |
} | |
else | |
{ | |
a1[3] = 0; | |
a1[4] = 0; | |
a1[5] = 23; | |
a1[6] = 59; | |
} | |
Conf_Dir_Free((__int64)v4); | |
return 0LL; | |
} | |
//----- (00000000000223D1) ---------------------------------------------------- | |
__int64 __fastcall Set_LED_Night_Mode_Status(unsigned int *a1, int a2) | |
{ | |
const char *v2; // rax | |
unsigned int v3; // eax | |
const char *v4; // rax | |
const char *v5; // rax | |
char v7[8]; // [rsp+10h] [rbp-C0h] BYREF | |
char s[8]; // [rsp+20h] [rbp-B0h] BYREF | |
char command[128]; // [rsp+30h] [rbp-A0h] BYREF | |
__int64 v10; // [rsp+B0h] [rbp-20h] BYREF | |
char *v11; // [rsp+B8h] [rbp-18h] | |
unsigned int v12; // [rsp+C4h] [rbp-Ch] | |
unsigned int v13; // [rsp+C8h] [rbp-8h] | |
unsigned int v14; // [rsp+CCh] [rbp-4h] | |
v14 = -1; | |
v13 = 100; | |
v12 = 2; | |
v10 = 0LL; | |
memset(command, 0, sizeof(command)); | |
*(_QWORD *)s = 0LL; | |
*(_QWORD *)v7 = 0LL; | |
v11 = 0LL; | |
if ( !a1 ) | |
goto LABEL_46; | |
v11 = Conf_Dir_Load("/etc/config/uLinux.conf"); | |
if ( !v11 ) | |
goto LABEL_46; | |
if ( *a1 ) | |
v2 = "TRUE"; | |
else | |
v2 = "FALSE"; | |
Conf_Dir_Set_Str((__int64)v11, "LED", "LED Enable", v2); | |
Conf_Dir_Set_Int((__int64)v11, "LED", "LED Brightness Value", a1[1]); | |
if ( a2 ) | |
{ | |
if ( a2 != 1 ) | |
goto LABEL_46; | |
qmemcpy(&v10, "PWM", 3); | |
v13 = (int)(float)(int)a1[1]; | |
} | |
else | |
{ | |
LODWORD(v10) = 1330204743; | |
v3 = a1[1]; | |
switch ( v3 ) | |
{ | |
case 0x32u: | |
v12 = 1; | |
break; | |
case 0x64u: | |
v12 = 2; | |
break; | |
case 0u: | |
v12 = 0; | |
break; | |
} | |
} | |
if ( *a1 == 1 ) | |
{ | |
if ( a1[2] == 1 ) | |
{ | |
if ( a1[3] <= 0x17 && a1[5] <= 0x17 && a1[4] <= 0x3B && a1[6] <= 0x3B ) | |
{ | |
snprintf(s, 8uLL, "%02d:%02d", a1[3], a1[4]); | |
snprintf(v7, 8uLL, "%02d:%02d", a1[5], a1[6]); | |
if ( a1[2] ) | |
v4 = "TRUE"; | |
else | |
v4 = "FALSE"; | |
Conf_Dir_Set_Str((__int64)v11, "LED", "LED Time Period", v4); | |
Conf_Dir_Set_Str((__int64)v11, "LED", "LED Start Time", s); | |
Conf_Dir_Set_Str((__int64)v11, "LED", "LED End Time", v7); | |
if ( a2 ) | |
snprintf( | |
command, | |
0x80uLL, | |
"%s night_mode %s %d %d %d %d %d %d 1>/dev/null 2>/dev/null", | |
"/etc/init.d/set_led.sh", | |
(const char *)&v10, | |
*a1, | |
v13, | |
a1[3], | |
a1[4], | |
a1[5], | |
a1[6]); | |
else | |
snprintf( | |
command, | |
0x80uLL, | |
"%s night_mode %s %d %d %d %d %d %d 1>/dev/null 2>/dev/null", | |
"/etc/init.d/set_led.sh", | |
(const char *)&v10, | |
*a1, | |
v12, | |
a1[3], | |
a1[4], | |
a1[5], | |
a1[6]); | |
if ( a1[3] == a1[5] && a1[4] == a1[6] ) | |
{ | |
Conf_Dir_Set_Str((__int64)v11, "LED", "LED Time Period", "FALSE"); | |
Conf_Dir_Remove((__int64)v11, "LED", "LED Start Time"); | |
Conf_Dir_Remove((__int64)v11, "LED", "LED End Time"); | |
if ( a2 ) | |
snprintf( | |
command, | |
0x80uLL, | |
"%s night_mode %s %d %d 1>/dev/null 2>/dev/null", | |
"/etc/init.d/set_led.sh", | |
(const char *)&v10, | |
*a1, | |
v13); | |
else | |
snprintf( | |
command, | |
0x80uLL, | |
"%s night_mode %s %d %d 1>/dev/null 2>/dev/null", | |
"/etc/init.d/set_led.sh", | |
(const char *)&v10, | |
*a1, | |
v12); | |
} | |
goto LABEL_44; | |
} | |
Conf_Dir_Set_Str((__int64)v11, "LED", "LED Time Period", "FALSE"); | |
Conf_Dir_Remove((__int64)v11, "LED", "LED Start Time"); | |
Conf_Dir_Remove((__int64)v11, "LED", "LED End Time"); | |
if ( !a2 ) | |
goto LABEL_36; | |
} | |
else | |
{ | |
if ( a1[2] ) | |
v5 = "TRUE"; | |
else | |
v5 = "FALSE"; | |
Conf_Dir_Set_Str((__int64)v11, "LED", "LED Time Period", v5); | |
Conf_Dir_Remove((__int64)v11, "LED", "LED Start Time"); | |
Conf_Dir_Remove((__int64)v11, "LED", "LED End Time"); | |
if ( !a2 ) | |
{ | |
LABEL_36: | |
snprintf( | |
command, | |
0x80uLL, | |
"%s night_mode %s %d %d 1>/dev/null 2>/dev/null", | |
"/etc/init.d/set_led.sh", | |
(const char *)&v10, | |
*a1, | |
v12); | |
goto LABEL_44; | |
} | |
} | |
snprintf( | |
command, | |
0x80uLL, | |
"%s night_mode %s %d %d 1>/dev/null 2>/dev/null", | |
"/etc/init.d/set_led.sh", | |
(const char *)&v10, | |
*a1, | |
v13); | |
} | |
else | |
{ | |
Conf_Dir_Set_Str((__int64)v11, "LED", "LED Time Period", "FALSE"); | |
Conf_Dir_Remove((__int64)v11, "LED", "LED Brightness Value"); | |
Conf_Dir_Remove((__int64)v11, "LED", "LED Start Time"); | |
Conf_Dir_Remove((__int64)v11, "LED", "LED End Time"); | |
snprintf( | |
command, | |
0x80uLL, | |
"%s night_mode %s %d 1>/dev/null 2>/dev/null", | |
"/etc/init.d/set_led.sh", | |
(const char *)&v10, | |
*a1); | |
} | |
LABEL_44: | |
if ( !(unsigned int)Conf_Dir_Wirte_File(v11) ) | |
{ | |
system(command); | |
v14 = 0; | |
} | |
LABEL_46: | |
if ( v11 ) | |
Conf_Dir_Free((__int64)v11); | |
return v14; | |
} | |
// 22768: conditional instruction was optimized away because esi.4==1 | |
// 228BC: conditional instruction was optimized away because esi.4==1 | |
// 229BE: conditional instruction was optimized away because esi.4==1 | |
// 22ADB: conditional instruction was optimized away because esi.4==1 | |
// A5B0: using guessed type __int64 __fastcall Conf_Dir_Wirte_File(_QWORD); | |
//----- (0000000000022C15) ---------------------------------------------------- | |
__int64 __fastcall Get_QOS_Lang(const char *a1, char *a2, signed int a3) | |
{ | |
char s[1024]; // [rsp+20h] [rbp-400h] BYREF | |
sprintf(s, "%s/%s/config", "/etc/config/.qos_config/users", a1); | |
if ( !(unsigned int)Is_File_Exist(s) ) | |
return 0xFFFFFFFFLL; | |
Get_Private_Profile_String((__int64)"common", (__int64)"lang", "eng", a2, a3, (__int64)s); | |
return 0LL; | |
} | |
// A570: using guessed type __int64 __fastcall Is_File_Exist(_QWORD); | |
//----- (0000000000022CB8) ---------------------------------------------------- | |
__int64 __fastcall Is_Valid_Source(const char *a1) | |
{ | |
const char *v2; // [rsp+18h] [rbp-8h] | |
v2 = a1; | |
if ( !a1 ) | |
return 0LL; | |
if ( strlen(a1) <= 1 ) | |
return 0LL; | |
while ( *v2 ) | |
{ | |
if ( ((*__ctype_b_loc())[*v2] & 8) != 0 ) | |
{ | |
++v2; | |
} | |
else | |
{ | |
switch ( *v2 ) | |
{ | |
case '.': | |
++v2; | |
break; | |
case ':': | |
++v2; | |
break; | |
case ' ': | |
++v2; | |
break; | |
default: | |
return 0LL; | |
} | |
} | |
} | |
return 1LL; | |
} | |
//----- (0000000000022D74) ---------------------------------------------------- | |
_BOOL8 __fastcall sub_22D74(int a1) | |
{ | |
return (unsigned int)(a1 - 128) <= 0x3F; | |
} | |
//----- (0000000000022D8C) ---------------------------------------------------- | |
__int64 __fastcall sub_22D8C(int a1) | |
{ | |
if ( !sub_22D74(a1) ) | |
return (unsigned int)a1; | |
if ( a1 > 127 && a1 <= 133 || a1 > 159 && a1 <= 165 ) | |
return 97LL; | |
if ( a1 > 135 && a1 <= 139 || a1 > 167 && a1 <= 171 ) | |
return 101LL; | |
if ( a1 > 139 && a1 <= 143 || a1 > 171 && a1 <= 175 ) | |
return 105LL; | |
if ( a1 > 145 && a1 <= 150 || a1 > 177 && a1 <= 182 || a1 == 152 || a1 == 184 ) | |
return 111LL; | |
if ( a1 > 152 && a1 <= 156 || a1 > 184 && a1 <= 188 ) | |
return 117LL; | |
switch ( a1 ) | |
{ | |
case 157: | |
case 189: | |
case 191: | |
return 121LL; | |
case 135: | |
case 167: | |
return 99LL; | |
case 145: | |
case 177: | |
return 110LL; | |
} | |
return (unsigned int)a1; | |
} | |
//----- (0000000000022EF9) ---------------------------------------------------- | |
__int64 __fastcall utf8_strtolower(_BYTE *a1, __int64 a2) | |
{ | |
_BYTE *v2; // rbx | |
char v4; // dl | |
__int64 v5; // [rsp+0h] [rbp-20h] | |
_BYTE *v6; // [rsp+8h] [rbp-18h] | |
v6 = a1; | |
v5 = a2; | |
v2 = a1; | |
if ( !a1 || !a2 ) | |
return 0xFFFFFFFFLL; | |
while ( 1 ) | |
{ | |
if ( *v2 == 0xC3 ) | |
v4 = sub_22D8C((unsigned __int8)*++v2); | |
else | |
v4 = tolower((unsigned __int8)*v2); | |
*v6 = v4; | |
if ( !*v2 ) | |
break; | |
if ( --v5 ) | |
{ | |
++v2; | |
++v6; | |
if ( *v2 ) | |
continue; | |
} | |
goto LABEL_11; | |
} | |
++v6; | |
LABEL_11: | |
*v6 = 0; | |
return 0LL; | |
} | |
//----- (0000000000022F99) ---------------------------------------------------- | |
__int64 __fastcall utf8_strcasecmp(_BYTE *a1, _BYTE *a2) | |
{ | |
_BYTE *v2; // r12 | |
_BYTE *v3; // rbx | |
unsigned __int8 v5; // [rsp+1Eh] [rbp-12h] | |
unsigned __int8 v6; // [rsp+1Fh] [rbp-11h] | |
v2 = a1; | |
v3 = a2; | |
if ( a1 == a2 ) | |
return 0LL; | |
do | |
{ | |
if ( *v2 == 0xC3 ) | |
v6 = sub_22D8C((unsigned __int8)*++v2); | |
else | |
v6 = tolower((unsigned __int8)*v2); | |
if ( *v3 == 0xC3 ) | |
v5 = sub_22D8C((unsigned __int8)*++v3); | |
else | |
v5 = tolower((unsigned __int8)*v3); | |
if ( !v6 ) | |
break; | |
++v2; | |
++v3; | |
} | |
while ( v6 == v5 ); | |
return v6 - (unsigned int)v5; | |
} | |
//----- (0000000000023051) ---------------------------------------------------- | |
__int64 __fastcall utf8_strncasecmp(_BYTE *a1, _BYTE *a2, __int64 a3) | |
{ | |
_BYTE *v3; // r12 | |
_BYTE *v4; // rbx | |
__int64 v6; // [rsp+8h] [rbp-38h] | |
unsigned __int8 v7; // [rsp+2Eh] [rbp-12h] | |
unsigned __int8 v8; // [rsp+2Fh] [rbp-11h] | |
v6 = a3; | |
v3 = a1; | |
v4 = a2; | |
if ( a1 == a2 || !a3 ) | |
return 0LL; | |
do | |
{ | |
if ( *v3 == 0xC3 ) | |
{ | |
v8 = sub_22D8C((unsigned __int8)*++v3); | |
--v6; | |
} | |
else | |
{ | |
v8 = tolower((unsigned __int8)*v3); | |
} | |
if ( *v4 == 0xC3 ) | |
v7 = sub_22D8C((unsigned __int8)*++v4); | |
else | |
v7 = tolower((unsigned __int8)*v4); | |
if ( !v8 ) | |
break; | |
if ( !--v6 ) | |
break; | |
++v3; | |
++v4; | |
} | |
while ( v8 == v7 ); | |
return v8 - (unsigned int)v7; | |
} | |
//----- (0000000000023127) ---------------------------------------------------- | |
__int64 __fastcall mkdir_p(const char *a1, __mode_t a2) | |
{ | |
char *i; // rax | |
char *v4; // [rsp+10h] [rbp-20h] | |
char *path; // [rsp+18h] [rbp-18h] | |
unsigned int v6; // [rsp+2Ch] [rbp-4h] | |
v6 = -1; | |
path = strdup(a1); | |
for ( i = strchr(path, 47); ; i = strchr(v4 + 1, 47) ) | |
{ | |
v4 = i; | |
if ( i ) | |
*i = 0; | |
if ( *path ) | |
{ | |
v6 = mkdir(path, a2); | |
if ( v6 && *__errno_location() == 17 ) | |
v6 = 0; | |
if ( v6 ) | |
break; | |
} | |
if ( !v4 ) | |
break; | |
*v4 = 47; | |
} | |
free(path); | |
return v6; | |
} | |
//----- (00000000000231EA) ---------------------------------------------------- | |
__int64 __fastcall sub_231EA(const char *a1, const char *a2) | |
{ | |
int v3; // eax | |
char nptr[64]; // [rsp+10h] [rbp-A0h] BYREF | |
char dest[64]; // [rsp+50h] [rbp-60h] BYREF | |
int v6; // [rsp+90h] [rbp-20h] | |
int v7; // [rsp+94h] [rbp-1Ch] | |
int v8; // [rsp+98h] [rbp-18h] | |
int v9; // [rsp+9Ch] [rbp-14h] | |
int v10; // [rsp+A0h] [rbp-10h] | |
int v11; // [rsp+A4h] [rbp-Ch] | |
int i; // [rsp+A8h] [rbp-8h] | |
unsigned int v13; // [rsp+ACh] [rbp-4h] | |
v13 = 0; | |
v10 = 0; | |
i = 0; | |
v11 = 0; | |
memset(dest, 0, sizeof(dest)); | |
memset(nptr, 0, sizeof(nptr)); | |
v9 = strlen(a1); | |
v8 = strlen(a2); | |
while ( v9 > i && a1[i] > 47 && a1[i] <= 57 ) | |
++i; | |
while ( v8 > v11 && a2[v11] > 47 && a2[v11] <= 57 ) | |
++v11; | |
strncpy(dest, a1, i); | |
strncpy(nptr, a2, v11); | |
v7 = atoi(dest); | |
v6 = atoi(nptr); | |
if ( v7 < v6 ) | |
return 0xFFFFFFFFLL; | |
if ( v7 > v6 ) | |
return 1LL; | |
strcpy(dest, &a1[i]); | |
strcpy(nptr, &a2[v11]); | |
v9 = strlen(dest); | |
v8 = strlen(nptr); | |
v3 = v9; | |
if ( v8 >= v9 ) | |
v3 = v8; | |
v10 = v3; | |
for ( i = 0; i < v10; ++i ) | |
{ | |
if ( dest[i] > nptr[i] ) | |
return 1; | |
if ( dest[i] < nptr[i] ) | |
return (unsigned int)-1; | |
} | |
return v13; | |
} | |
// 231EA: using guessed type char dest[64]; | |
// 231EA: using guessed type char nptr[64]; | |
//----- (0000000000023437) ---------------------------------------------------- | |
__int64 __fastcall QNAP_Version_Compare(const char *a1, const char *a2) | |
{ | |
char v3[8]; // [rsp+10h] [rbp-A0h] BYREF | |
char v4[56]; // [rsp+18h] [rbp-98h] BYREF | |
char dest[8]; // [rsp+50h] [rbp-60h] BYREF | |
char v6[56]; // [rsp+58h] [rbp-58h] BYREF | |
unsigned int v7; // [rsp+94h] [rbp-1Ch] | |
char *v8; // [rsp+98h] [rbp-18h] | |
char *v9; // [rsp+A0h] [rbp-10h] | |
int v10; // [rsp+A8h] [rbp-8h] | |
int v11; // [rsp+ACh] [rbp-4h] | |
*(_QWORD *)dest = 0LL; | |
memset(v6, 0, sizeof(v6)); | |
*(_QWORD *)v3 = 0LL; | |
memset(v4, 0, sizeof(v4)); | |
v9 = strchr(a1, 46); | |
v8 = strchr(a2, 46); | |
if ( v9 ) | |
v11 = (_DWORD)v9 - (_DWORD)a1; | |
else | |
v11 = strlen(a1); | |
if ( v8 ) | |
v10 = (_DWORD)v8 - (_DWORD)a2; | |
else | |
v10 = strlen(a2); | |
strncpy(dest, a1, v11); | |
strncpy(v3, a2, v10); | |
v7 = sub_231EA(dest, v3); | |
if ( v7 ) | |
return v7; | |
v9 = strchr(a1, 46); | |
v8 = strchr(a2, 46); | |
memset(dest, 0, 0x40uLL); | |
memset(v3, 0, 0x40uLL); | |
if ( v9 && v8 ) | |
{ | |
strcpy(dest, v9); | |
strcpy(v3, v8); | |
return QNAP_Version_Compare(&dest[1], &v3[1]); | |
} | |
else if ( v9 || !v8 ) | |
{ | |
return v9 && !v8; | |
} | |
else | |
{ | |
return 0xFFFFFFFFLL; | |
} | |
} | |
// A170: using guessed type __int64 __fastcall QNAP_Version_Compare(_QWORD, _QWORD); | |
//----- (0000000000023665) ---------------------------------------------------- | |
__int64 __fastcall Set_Encode_Field_To_Private_Conf(__int64 a1, __int64 a2, const char *a3, int a4, __int64 a5) | |
{ | |
int v5; // eax | |
char dest[512]; // [rsp+30h] [rbp-210h] BYREF | |
void *ptr; // [rsp+230h] [rbp-10h] | |
unsigned int v11; // [rsp+23Ch] [rbp-4h] | |
v11 = -1; | |
memset(dest, 0, sizeof(dest)); | |
ptr = 0LL; | |
if ( a1 ) | |
{ | |
if ( a2 ) | |
{ | |
if ( a3 ) | |
{ | |
if ( a5 ) | |
{ | |
strncpy(dest, a3, 0x1FFuLL); | |
v5 = strlen(dest); | |
ptr = Password_Encode(dest, v5, a4); | |
if ( ptr ) | |
{ | |
Set_Private_Profile_String(a1, a2, (__int64)ptr, a5); | |
v11 = 0; | |
} | |
} | |
} | |
} | |
} | |
if ( ptr ) | |
{ | |
free(ptr); | |
ptr = 0LL; | |
} | |
return v11; | |
} | |
//----- (0000000000023787) ---------------------------------------------------- | |
__int64 __fastcall Get_Decode_Field_From_Private_Conf( | |
__int64 a1, | |
__int64 a2, | |
const char *a3, | |
char *a4, | |
int a5, | |
int a6, | |
__int64 a7) | |
{ | |
char v12[512]; // [rsp+30h] [rbp-210h] BYREF | |
char *src; // [rsp+230h] [rbp-10h] | |
unsigned int v14; // [rsp+23Ch] [rbp-4h] | |
v14 = -1; | |
memset(v12, 0, sizeof(v12)); | |
src = 0LL; | |
if ( a1 && a2 && a3 && a4 && a7 ) | |
{ | |
if ( (int)Get_Private_Profile_String(a1, a2, a3, v12, 512, a7) <= 0 ) | |
{ | |
strncpy(a4, a3, a5 - 1); | |
} | |
else | |
{ | |
src = Password_Decode(v12, a6); | |
if ( !src ) | |
goto LABEL_11; | |
strncpy(a4, src, a5 - 1); | |
} | |
v14 = 0; | |
} | |
LABEL_11: | |
if ( src ) | |
{ | |
free(src); | |
src = 0LL; | |
} | |
return v14; | |
} | |
//----- (00000000000238EB) ---------------------------------------------------- | |
__int64 __fastcall Get_Device_CUID(char *a1, int a2) | |
{ | |
size_t v3; // rax | |
char v4[16]; // [rsp+10h] [rbp-170h] BYREF | |
char src[2]; // [rsp+20h] [rbp-160h] BYREF | |
char v6; // [rsp+22h] [rbp-15Eh] | |
char v7[8]; // [rsp+30h] [rbp-150h] BYREF | |
__int64 v8; // [rsp+38h] [rbp-148h] | |
__int64 v9; // [rsp+40h] [rbp-140h] | |
__int64 v10; // [rsp+48h] [rbp-138h] | |
char v11; // [rsp+50h] [rbp-130h] | |
__int64 s[32]; // [rsp+60h] [rbp-120h] BYREF | |
char v13; // [rsp+160h] [rbp-20h] | |
FILE *stream; // [rsp+168h] [rbp-18h] | |
unsigned int v15; // [rsp+174h] [rbp-Ch] | |
int i; // [rsp+178h] [rbp-8h] | |
int v17; // [rsp+17Ch] [rbp-4h] | |
memset(s, 0, sizeof(s)); | |
v13 = 0; | |
*(_QWORD *)v7 = 0LL; | |
v8 = 0LL; | |
v9 = 0LL; | |
v10 = 0LL; | |
v11 = 0; | |
v15 = -1; | |
v17 = 0; | |
*(_WORD *)src = 0; | |
v6 = 0; | |
memset(s, 0, 0x101uLL); | |
memset(v7, 0, 0x21uLL); | |
if ( (unsigned int)Is_File_Exist("/etc/config/.cuid") ) | |
{ | |
stream = fopen64("/etc/config/.cuid", "r"); | |
if ( stream ) | |
{ | |
memset(s, 0, 0x101uLL); | |
if ( fgets((char *)s, 33, stream) && strlen((const char *)s) == 32 ) | |
v17 = 1; | |
fclose(stream); | |
} | |
} | |
if ( v17 ) | |
{ | |
strncpy(a1, (const char *)s, a2); | |
if ( a2 > 32 ) | |
a1[32] = 0; | |
return v15; | |
} | |
else if ( (unsigned int)Get_Device_SUID(s, 257LL) ) | |
{ | |
return v15; | |
} | |
else | |
{ | |
v3 = strlen((const char *)s); | |
QNAP_Digest_MD5(s, v3, v4, 16LL); | |
for ( i = 0; i <= 15; ++i ) | |
{ | |
sprintf(src, "%2.2x", (unsigned __int8)v4[i]); | |
strcat(v7, src); | |
} | |
strncpy(a1, v7, a2); | |
if ( a2 > 32 ) | |
a1[32] = 0; | |
Set_Device_CUID(a1); | |
return 0LL; | |
} | |
} | |
// 9F70: using guessed type __int64 __fastcall QNAP_Digest_MD5(_QWORD, _QWORD, _QWORD, _QWORD); | |
// A040: using guessed type __int64 __fastcall Set_Device_CUID(_QWORD); | |
// A570: using guessed type __int64 __fastcall Is_File_Exist(_QWORD); | |
// A620: using guessed type __int64 __fastcall Get_Device_SUID(_QWORD, _QWORD); | |
// 238EB: using guessed type char var_170[16]; | |
//----- (0000000000023B7C) ---------------------------------------------------- | |
__int64 __fastcall Set_Device_CUID(const char *a1) | |
{ | |
char s[264]; // [rsp+10h] [rbp-110h] BYREF | |
FILE *stream; // [rsp+118h] [rbp-8h] | |
if ( !a1 ) | |
return 0xFFFFFFFFLL; | |
stream = fopen64("/etc/config/.cuid", "w"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
memset(s, 0, 0x101uLL); | |
snprintf(s, 0x101uLL, "%s", a1); | |
fputs(s, stream); | |
fclose(stream); | |
return 0LL; | |
} | |
//----- (0000000000023C33) ---------------------------------------------------- | |
_BYTE *__fastcall Skip_Unicode_Control_Characters(_BYTE *a1) | |
{ | |
_BYTE *v1; // rax | |
_BYTE *result; // rax | |
_BYTE *v3; // [rsp+8h] [rbp-10h] | |
_BYTE *v4; // [rsp+10h] [rbp-8h] | |
v3 = a1; | |
v4 = a1; | |
while ( *v3 ) | |
{ | |
if ( !byte_236940[(unsigned __int8)*v3] ) | |
{ | |
v1 = v4++; | |
*v1 = *v3; | |
} | |
++v3; | |
} | |
result = v4; | |
*v4 = 0; | |
return result; | |
} | |
// 236940: using guessed type _BYTE byte_236940[256]; | |
//----- (0000000000023C97) ---------------------------------------------------- | |
__int64 __fastcall sub_23C97(char *a1, char *a2, void *a3, unsigned __int64 a4, char *a5) | |
{ | |
char *v5; // rdx | |
size_t v6; // rdx | |
char *v11; // [rsp+20h] [rbp-70h] | |
unsigned int v12; // [rsp+3Ch] [rbp-54h] BYREF | |
char src[64]; // [rsp+40h] [rbp-50h] BYREF | |
__int64 v14; // [rsp+80h] [rbp-10h] | |
unsigned int v15; // [rsp+8Ch] [rbp-4h] | |
v11 = a2; | |
v14 = EVP_MD_CTX_new(); | |
v5 = src; | |
memset(src, 0, sizeof(src)); | |
v12 = 0; | |
v15 = -1; | |
if ( v14 ) | |
{ | |
if ( a1 ) | |
{ | |
if ( a3 ) | |
{ | |
a2 = a5; | |
if ( (unsigned int)EVP_DigestInit(v14, a5) == 1 ) | |
{ | |
a2 = a1; | |
if ( (unsigned int)EVP_DigestUpdate(v14, a1, v11) == 1 ) | |
{ | |
a2 = src; | |
if ( (unsigned int)EVP_DigestFinal(v14, src, &v12) == 1 ) | |
{ | |
v6 = v12; | |
if ( v12 > a4 ) | |
v6 = a4; | |
a2 = src; | |
memcpy(a3, src, v6); | |
v15 = 0; | |
} | |
} | |
} | |
} | |
} | |
} | |
if ( v14 ) | |
EVP_MD_CTX_free(v14, a2, v5); | |
return v15; | |
} | |
// 23D96: variable 'v5' is possibly undefined | |
// 9BF0: using guessed type __int64 __fastcall EVP_DigestInit(_QWORD, _QWORD); | |
// A700: using guessed type __int64 __fastcall EVP_MD_CTX_free(_QWORD, _QWORD, _QWORD); | |
// A880: using guessed type __int64 __fastcall EVP_DigestFinal(_QWORD, _QWORD, _QWORD); | |
// AAC0: using guessed type __int64 EVP_MD_CTX_new(void); | |
// ACD0: using guessed type __int64 __fastcall EVP_DigestUpdate(_QWORD, _QWORD, _QWORD); | |
//----- (0000000000023DA0) ---------------------------------------------------- | |
__int64 __fastcall QNAP_Digest_MD5(char *a1, char *a2, void *a3, unsigned __int64 a4) | |
{ | |
char *v4; // rax | |
v4 = (char *)EVP_md5(); | |
return sub_23C97(a1, a2, a3, a4, v4); | |
} | |
// AB30: using guessed type __int64 EVP_md5(void); | |
//----- (0000000000023DDD) ---------------------------------------------------- | |
__int64 __fastcall QNAP_Digest_SHA256(char *a1, char *a2, void *a3, unsigned __int64 a4) | |
{ | |
char *v4; // rax | |
v4 = (char *)EVP_sha256(); | |
return sub_23C97(a1, a2, a3, a4, v4); | |
} | |
// 9E00: using guessed type __int64 EVP_sha256(void); | |
//----- (0000000000023E1A) ---------------------------------------------------- | |
__int64 __fastcall QNAP_Digest_SHA1(char *a1, char *a2, void *a3, unsigned __int64 a4) | |
{ | |
char *v4; // rax | |
v4 = (char *)EVP_sha1(); | |
return sub_23C97(a1, a2, a3, a4, v4); | |
} | |
// AC80: using guessed type __int64 EVP_sha1(void); | |
//----- (0000000000023E57) ---------------------------------------------------- | |
__int64 __fastcall sub_23E57(const char *a1) | |
{ | |
int i; // [rsp+1Ch] [rbp-4h] | |
if ( !a1 ) | |
return 0LL; | |
if ( (unsigned int)strlen(a1) != 12 ) | |
return 0LL; | |
for ( i = 0; i <= 11; ++i ) | |
{ | |
if ( ((*__ctype_b_loc())[a1[i]] & 0x1000) == 0 ) | |
return 0LL; | |
} | |
return 1LL; | |
} | |
//----- (0000000000023EE2) ---------------------------------------------------- | |
void __fastcall sub_23EE2(const char *a1) | |
{ | |
char v1; // [rsp+13h] [rbp-Dh] | |
int i; // [rsp+18h] [rbp-8h] | |
int v3; // [rsp+1Ch] [rbp-4h] | |
if ( a1 ) | |
{ | |
v3 = 0; | |
for ( i = strlen(a1) - 1; v3 < i; --i ) | |
{ | |
v1 = a1[v3]; | |
a1[v3] = a1[i]; | |
a1[i] = v1; | |
++v3; | |
} | |
} | |
} | |
//----- (0000000000023F86) ---------------------------------------------------- | |
__int64 __fastcall sub_23F86(const char *a1, char *a2, int a3) | |
{ | |
__int64 v5[3]; // [rsp+20h] [rbp-30h] BYREF | |
char v6; // [rsp+38h] [rbp-18h] | |
int v7; // [rsp+48h] [rbp-8h] | |
int i; // [rsp+4Ch] [rbp-4h] | |
i = 0; | |
v7 = 0; | |
memset(v5, 0, sizeof(v5)); | |
v6 = 0; | |
if ( !a1 || !a2 || a3 <= 23 ) | |
return 0xFFFFFFFFLL; | |
v7 = strlen(a1); | |
for ( i = 0; i < v7; ++i ) | |
*((_BYTE *)v5 + i) = a1[dword_236A40[i]]; | |
snprintf(a2, a3, "%s", (const char *)v5); | |
return 0LL; | |
} | |
// 236A40: using guessed type int dword_236A40[32]; | |
//----- (000000000002405B) ---------------------------------------------------- | |
__int64 __fastcall sub_2405B(const char *a1, char *a2, int a3) | |
{ | |
__int64 v5[3]; // [rsp+20h] [rbp-30h] BYREF | |
char v6; // [rsp+38h] [rbp-18h] | |
int v7; // [rsp+48h] [rbp-8h] | |
int i; // [rsp+4Ch] [rbp-4h] | |
i = 0; | |
v7 = 0; | |
memset(v5, 0, sizeof(v5)); | |
v6 = 0; | |
if ( !a1 || !a2 || a3 <= 23 ) | |
return 0xFFFFFFFFLL; | |
v7 = strlen(a1); | |
for ( i = 0; i < v7; ++i ) | |
*((_BYTE *)v5 + dword_236A40[i]) = a1[i]; | |
snprintf(a2, a3, "%s", (const char *)v5); | |
return 0LL; | |
} | |
// 236A40: using guessed type int dword_236A40[32]; | |
//----- (0000000000024130) ---------------------------------------------------- | |
__int64 __fastcall sub_24130(const char *a1, char *a2, int a3) | |
{ | |
char v4; // dl | |
__int64 v6[3]; // [rsp+20h] [rbp-30h] BYREF | |
char v7; // [rsp+38h] [rbp-18h] | |
int v8; // [rsp+48h] [rbp-8h] | |
int i; // [rsp+4Ch] [rbp-4h] | |
i = 0; | |
v8 = 0; | |
memset(v6, 0, sizeof(v6)); | |
v7 = 0; | |
if ( !a1 || !a2 || a3 <= 23 ) | |
return 0xFFFFFFFFLL; | |
v8 = strlen(a1); | |
for ( i = 0; i < v8; ++i ) | |
{ | |
if ( dword_236AC0[i] == 1 ) | |
{ | |
if ( a1[i] == 49 ) | |
v4 = 48; | |
else | |
v4 = 49; | |
*((_BYTE *)v6 + i) = v4; | |
} | |
else | |
{ | |
*((_BYTE *)v6 + i) = a1[i]; | |
} | |
} | |
snprintf(a2, a3, "%s", (const char *)v6); | |
return 0LL; | |
} | |
// 236AC0: using guessed type _DWORD dword_236AC0[24]; | |
//----- (000000000002423B) ---------------------------------------------------- | |
__int64 __fastcall sub_2423B(const char *a1, char *a2, int a3, char *a4, int a5) | |
{ | |
unsigned int v9; // [rsp+28h] [rbp-8h] | |
unsigned int i; // [rsp+2Ch] [rbp-4h] | |
v9 = -1; | |
if ( !a1 || !a2 || !a4 ) | |
return 0xFFFFFFFFLL; | |
for ( i = 0; i <= 2; ++i ) | |
{ | |
if ( !strcmp(&oui_map[12 * i], a1) ) | |
{ | |
snprintf(a2, a3, "%c", (unsigned int)oui_map[12 * i + 7]); | |
snprintf(a4, a5, "%s", &oui_map[12 * i + 8]); | |
return 0; | |
} | |
} | |
return v9; | |
} | |
//----- (0000000000024365) ---------------------------------------------------- | |
__int64 __fastcall sub_24365(_BYTE *a1, const char *a2, char *a3, int a4) | |
{ | |
unsigned int v7; // [rsp+28h] [rbp-8h] | |
unsigned int i; // [rsp+2Ch] [rbp-4h] | |
v7 = -1; | |
if ( !a3 || !a1 || !a2 ) | |
return 0xFFFFFFFFLL; | |
for ( i = 0; i <= 2; ++i ) | |
{ | |
if ( oui_map[12 * i + 7] == *a1 && !strcmp(&oui_map[12 * i + 8], a2) ) | |
{ | |
snprintf(a3, a4, "%s", &oui_map[12 * i]); | |
return 0; | |
} | |
} | |
return v7; | |
} | |
//----- (000000000002446F) ---------------------------------------------------- | |
__int64 __fastcall sub_2446F(int a1, __int64 a2, int a3) | |
{ | |
char v4; // al | |
int i; // [rsp+1Ch] [rbp-4h] | |
if ( !a2 ) | |
return 0xFFFFFFFFLL; | |
for ( i = a3 - 1; i >= 0; --i ) | |
{ | |
if ( ((a1 >> i) & 1) != 0 ) | |
v4 = 49; | |
else | |
v4 = 48; | |
*(_BYTE *)(a2 + a3 - 2 - i) = v4; | |
} | |
*(_BYTE *)(a3 - 1LL + a2) = 0; | |
return 0LL; | |
} | |
//----- (0000000000024502) ---------------------------------------------------- | |
_BOOL8 __fastcall sub_24502(_BYTE *a1, const char *a2) | |
{ | |
int v3; // [rsp+10h] [rbp-50h] BYREF | |
__int16 v4; // [rsp+14h] [rbp-4Ch] | |
char v5; // [rsp+16h] [rbp-4Ah] | |
int v6[4]; // [rsp+20h] [rbp-40h] BYREF | |
__int64 v7[3]; // [rsp+30h] [rbp-30h] BYREF | |
int v8; // [rsp+48h] [rbp-18h] | |
int v9; // [rsp+58h] [rbp-8h] | |
int i; // [rsp+5Ch] [rbp-4h] | |
i = 0; | |
v9 = 0; | |
memset(v7, 0, sizeof(v7)); | |
v8 = 0; | |
v6[0] = 0; | |
v3 = 0; | |
v4 = 0; | |
v5 = 0; | |
if ( !a1 || !a2 ) | |
return 0LL; | |
if ( strlen(a2) != 8 ) | |
return 0LL; | |
for ( i = 0; i <= 7; ++i ) | |
{ | |
if ( ((*__ctype_b_loc())[a2[i]] & 0x1000) == 0 ) | |
return 0LL; | |
} | |
v9 = strtoll(a2, 0LL, 10); | |
if ( (unsigned int)sub_2446F(v9, (__int64)v7, 28) ) | |
return 0LL; | |
for ( i = 0; i <= 2; ++i ) | |
*((_BYTE *)v6 + i) = *((_BYTE *)v7 + i); | |
return (unsigned int)sub_24365(a1, (const char *)v6, (char *)&v3, 7) == 0; | |
} | |
//----- (0000000000024664) ---------------------------------------------------- | |
__int64 __fastcall QNAP_MAC_To_Cloudkey(const char *a1, char *a2, int a3) | |
{ | |
__int64 v5[3]; // [rsp+20h] [rbp-F0h] BYREF | |
char v6; // [rsp+38h] [rbp-D8h] | |
__int64 v7[3]; // [rsp+40h] [rbp-D0h] BYREF | |
char v8; // [rsp+58h] [rbp-B8h] | |
__int64 v9[3]; // [rsp+60h] [rbp-B0h] BYREF | |
char v10; // [rsp+78h] [rbp-98h] | |
int v11[4]; // [rsp+80h] [rbp-90h] BYREF | |
__int16 v12[8]; // [rsp+90h] [rbp-80h] BYREF | |
char nptr[4]; // [rsp+A0h] [rbp-70h] BYREF | |
__int16 v14; // [rsp+A4h] [rbp-6Ch] | |
char v15; // [rsp+A6h] [rbp-6Ah] | |
int v16; // [rsp+B0h] [rbp-60h] BYREF | |
__int16 v17; // [rsp+B4h] [rbp-5Ch] | |
char v18; // [rsp+B6h] [rbp-5Ah] | |
__int64 v19[4]; // [rsp+C0h] [rbp-50h] BYREF | |
char v20[8]; // [rsp+E0h] [rbp-30h] BYREF | |
__int64 v21; // [rsp+E8h] [rbp-28h] | |
__int64 v22; // [rsp+F0h] [rbp-20h] | |
int v23; // [rsp+F8h] [rbp-18h] | |
unsigned int v24; // [rsp+FCh] [rbp-14h] | |
int v25; // [rsp+100h] [rbp-10h] | |
unsigned int v26; // [rsp+104h] [rbp-Ch] | |
int v27; // [rsp+108h] [rbp-8h] | |
unsigned int i; // [rsp+10Ch] [rbp-4h] | |
*(_QWORD *)v20 = 0LL; | |
v21 = 0LL; | |
v22 = 0LL; | |
v23 = 0; | |
memset(v19, 0, sizeof(v19)); | |
v16 = 0; | |
v17 = 0; | |
v18 = 0; | |
*(_DWORD *)nptr = 0; | |
v14 = 0; | |
v15 = 0; | |
v12[0] = 0; | |
v11[0] = 0; | |
memset(v9, 0, sizeof(v9)); | |
v10 = 0; | |
memset(v7, 0, sizeof(v7)); | |
v8 = 0; | |
memset(v5, 0, sizeof(v5)); | |
v6 = 0; | |
i = 0; | |
v27 = 0; | |
v25 = 0; | |
v26 = -1; | |
v24 = 0; | |
if ( a1 && a2 && a3 > 10 ) | |
{ | |
v25 = strlen(a1); | |
while ( v27 < v25 ) | |
{ | |
if ( a1[v27] == 58 ) | |
{ | |
++v27; | |
} | |
else | |
{ | |
*((_BYTE *)v19 + (int)i++) = toupper(a1[v27]); | |
if ( i > 0x1E ) | |
break; | |
++v27; | |
} | |
} | |
if ( (unsigned int)sub_23E57((const char *)v19) ) | |
{ | |
for ( i = 0; (int)i <= 5; ++i ) | |
{ | |
*((_BYTE *)&v16 + (int)i) = *((_BYTE *)v19 + (int)i); | |
nptr[i] = *((_BYTE *)v19 + (int)(i + 6)); | |
} | |
v24 = strtoll(nptr, 0LL, 16); | |
if ( !(unsigned int)sub_2446F(v24, (__int64)v9, 25) ) | |
{ | |
sub_23EE2((const char *)v9); | |
if ( !(unsigned int)sub_23F86((const char *)v9, (char *)v7, 25) | |
&& !(unsigned int)sub_24130((const char *)v7, (char *)v5, 25) ) | |
{ | |
sub_23EE2((const char *)v5); | |
if ( !(unsigned int)sub_2423B((const char *)&v16, (char *)v12, 2, (char *)v11, 4) ) | |
{ | |
snprintf(v20, 0x1CuLL, "%s%s", (const char *)v11, (const char *)v5); | |
v24 = strtoll(v20, 0LL, 2); | |
snprintf(a2, a3, "%s%08d", (const char *)v12, v24); | |
return 0; | |
} | |
} | |
} | |
} | |
} | |
return v26; | |
} | |
//----- (00000000000249D8) ---------------------------------------------------- | |
__int64 __fastcall QNAP_Cloudkey_To_MAC(const char *a1, char *a2, int a3) | |
{ | |
__int64 v5[3]; // [rsp+20h] [rbp-E0h] BYREF | |
char v6; // [rsp+38h] [rbp-C8h] | |
__int64 v7[3]; // [rsp+40h] [rbp-C0h] BYREF | |
char v8; // [rsp+58h] [rbp-A8h] | |
char v9[8]; // [rsp+60h] [rbp-A0h] BYREF | |
__int64 v10; // [rsp+68h] [rbp-98h] | |
__int64 v11; // [rsp+70h] [rbp-90h] | |
char v12; // [rsp+78h] [rbp-88h] | |
__int64 v13[3]; // [rsp+80h] [rbp-80h] BYREF | |
int v14; // [rsp+98h] [rbp-68h] | |
char nptr[8]; // [rsp+A0h] [rbp-60h] BYREF | |
char v16; // [rsp+A8h] [rbp-58h] | |
int v17[4]; // [rsp+B0h] [rbp-50h] BYREF | |
__int16 v18[8]; // [rsp+C0h] [rbp-40h] BYREF | |
char v19[4]; // [rsp+D0h] [rbp-30h] BYREF | |
__int16 v20; // [rsp+D4h] [rbp-2Ch] | |
char v21; // [rsp+D6h] [rbp-2Ah] | |
int v22; // [rsp+E0h] [rbp-20h] BYREF | |
__int16 v23; // [rsp+E4h] [rbp-1Ch] | |
char v24; // [rsp+E6h] [rbp-1Ah] | |
unsigned int v25; // [rsp+F0h] [rbp-10h] | |
int v26; // [rsp+F4h] [rbp-Ch] | |
int i; // [rsp+F8h] [rbp-8h] | |
unsigned int v28; // [rsp+FCh] [rbp-4h] | |
v28 = -1; | |
v25 = 0; | |
i = 0; | |
v26 = 0; | |
v22 = 0; | |
v23 = 0; | |
v24 = 0; | |
*(_DWORD *)v19 = 0; | |
v20 = 0; | |
v21 = 0; | |
v18[0] = 0; | |
v17[0] = 0; | |
*(_QWORD *)nptr = 0LL; | |
v16 = 0; | |
memset(v13, 0, sizeof(v13)); | |
v14 = 0; | |
*(_QWORD *)v9 = 0LL; | |
v10 = 0LL; | |
v11 = 0LL; | |
v12 = 0; | |
memset(v7, 0, sizeof(v7)); | |
v8 = 0; | |
memset(v5, 0, sizeof(v5)); | |
v6 = 0; | |
if ( a1 ) | |
{ | |
if ( a2 ) | |
{ | |
if ( a3 > 12 && strlen(a1) == 9 ) | |
{ | |
LOBYTE(v18[0]) = *a1; | |
snprintf(nptr, 9uLL, "%s", a1 + 1); | |
if ( sub_24502(v18, nptr) ) | |
{ | |
v25 = strtoll(nptr, 0LL, 10); | |
if ( !(unsigned int)sub_2446F(v25, (__int64)v13, 28) ) | |
{ | |
for ( i = 0; i <= 2; ++i ) | |
*((_BYTE *)v17 + i) = *((_BYTE *)v13 + i); | |
i = 3; | |
v26 = 0; | |
while ( i <= 26 ) | |
*((_BYTE *)v5 + v26++) = *((_BYTE *)v13 + i++); | |
if ( !(unsigned int)sub_24365(v18, (const char *)v17, (char *)&v22, 7) ) | |
{ | |
sub_23EE2((const char *)v5); | |
if ( !(unsigned int)sub_24130((const char *)v5, (char *)v7, 25) | |
&& !(unsigned int)sub_2405B((const char *)v7, v9, 25) ) | |
{ | |
sub_23EE2(v9); | |
v25 = strtoll(v9, 0LL, 2); | |
snprintf(v19, 7uLL, "%06X", v25); | |
snprintf(a2, a3, "%s%s", (const char *)&v22, v19); | |
return 0; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
return v28; | |
} | |
//----- (0000000000024D18) ---------------------------------------------------- | |
int init_debugger() | |
{ | |
FILE **v0; // rax | |
FILE *v1; // rdx | |
struct stat64 stat_buf; // [rsp+0h] [rbp-90h] BYREF | |
LODWORD(v0) = sub_2D9E0(g_debug_file, &stat_buf); | |
if ( !(_DWORD)v0 ) | |
{ | |
LODWORD(v0) = stat_buf.st_mode & 0xF000; | |
if ( (_DWORD)v0 == 0x8000 ) | |
{ | |
v1 = fopen64(g_debug_file, "a"); | |
v0 = &g_debug_fp; | |
g_debug_fp = v1; | |
} | |
} | |
return (int)v0; | |
} | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
//----- (0000000000024D74) ---------------------------------------------------- | |
FILE **finish_debugger() | |
{ | |
FILE **result; // rax | |
result = (FILE **)g_debug_fp; | |
if ( g_debug_fp ) | |
{ | |
fclose(g_debug_fp); | |
result = &g_debug_fp; | |
g_debug_fp = 0LL; | |
} | |
return result; | |
} | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
//----- (0000000000024DA9) ---------------------------------------------------- | |
_BOOL8 __fastcall sub_24DA9(char *a1) | |
{ | |
struct stat64 stat_buf; // [rsp+10h] [rbp-90h] BYREF | |
return !sub_2D9E0(a1, &stat_buf) && (stat_buf.st_mode & 0xF000) == 0x8000; | |
} | |
//----- (0000000000024DFC) ---------------------------------------------------- | |
__int64 __fastcall sub_24DFC(FILE *a1) | |
{ | |
FILE *stream; // [rsp+8h] [rbp-1028h] | |
char s[4104]; // [rsp+10h] [rbp-1020h] BYREF | |
char *v4; // [rsp+1018h] [rbp-18h] | |
unsigned int v5; // [rsp+1024h] [rbp-Ch] | |
size_t i; // [rsp+1028h] [rbp-8h] | |
stream = a1; | |
if ( !a1 ) | |
return 0LL; | |
i = 0LL; | |
v5 = 0; | |
while ( 1 ) | |
{ | |
do | |
{ | |
if ( !fgets(s, 4096, stream) ) | |
return 0LL; | |
for ( i = strlen(s); i; --i ) | |
{ | |
v4 = &s[i - 1]; | |
if ( *v4 != 13 && *v4 != 10 ) | |
break; | |
*v4 = 0; | |
} | |
} | |
while ( !i ); | |
if ( s[0] != 35 ) | |
break; | |
if ( i != 1 && s[1] == 33 ) | |
return 1; | |
} | |
return v5; | |
} | |
//----- (0000000000024EF0) ---------------------------------------------------- | |
__int64 __fastcall sub_24EF0(const char *a1) | |
{ | |
unsigned int v2; // [rsp+14h] [rbp-Ch] | |
FILE *stream; // [rsp+18h] [rbp-8h] | |
stream = fopen64(a1, "r"); | |
v2 = sub_24DFC(stream); | |
fclose(stream); | |
return v2; | |
} | |
//----- (0000000000024F33) ---------------------------------------------------- | |
__int64 __fastcall sub_24F33(__int64 a1, const char *a2) | |
{ | |
struct tm *v3; // rax | |
const char *v4; // rax | |
char s[64]; // [rsp+10h] [rbp-50h] BYREF | |
time_t timer; // [rsp+50h] [rbp-10h] BYREF | |
FILE *stream; // [rsp+58h] [rbp-8h] | |
if ( !a1 ) | |
return 0LL; | |
timer = time(0LL); | |
v3 = localtime(&timer); | |
strftime(s, 0x40uLL, "%F %T", v3); | |
stream = fopen64(g_internal_log_file, "a"); | |
if ( !stream ) | |
return (unsigned int)-*__errno_location(); | |
if ( a2 ) | |
v4 = a2; | |
else | |
v4 = (const char *)&unk_2F51D; | |
fprintf(stream, "%s,%.8lx,%s\n", s, a1, v4); | |
fclose(stream); | |
return 0LL; | |
} | |
//----- (0000000000024FFF) ---------------------------------------------------- | |
__int64 __fastcall sub_24FFF(const char *a1, char *a2) | |
{ | |
const char *newa; // [rsp+0h] [rbp-C0h] | |
char *ptr; // [rsp+18h] [rbp-A8h] BYREF | |
struct stat64 stat_buf; // [rsp+20h] [rbp-A0h] BYREF | |
unsigned int v6; // [rsp+B8h] [rbp-8h] | |
int fd; // [rsp+BCh] [rbp-4h] | |
newa = a2; | |
ptr = 0LL; | |
if ( !sub_2D9F0(a2, &stat_buf) ) | |
{ | |
asprintf(&ptr, "%s.XXXXXX", a2); | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s is existed\n", a2); | |
fflush(g_debug_fp); | |
} | |
if ( ptr ) | |
{ | |
fd = mkstemp64(ptr); | |
if ( fd != -1 ) | |
{ | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "change to %s\n", ptr); | |
fflush(g_debug_fp); | |
} | |
newa = ptr; | |
close(fd); | |
unlink(ptr); | |
} | |
} | |
} | |
v6 = rename(a1, newa); | |
if ( ptr ) | |
free(ptr); | |
return v6; | |
} | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
//----- (000000000002517D) ---------------------------------------------------- | |
__int64 __fastcall sub_2517D(int a1) | |
{ | |
int *v1; // rdx | |
__int64 result; // rax | |
unsigned int v3; // [rsp+1Ch] [rbp-4h] | |
v3 = *__errno_location(); | |
close(a1); | |
v1 = __errno_location(); | |
result = v3; | |
*v1 = v3; | |
return result; | |
} | |
//----- (00000000000251AB) ---------------------------------------------------- | |
__int64 __fastcall sub_251AB(char *a1, __int64 a2, __int64 a3) | |
{ | |
__int64 v4; // [rsp+8h] [rbp-B8h] BYREF | |
__int64 v5; // [rsp+10h] [rbp-B0h] | |
char *file; // [rsp+18h] [rbp-A8h] | |
struct stat64 stat_buf; // [rsp+20h] [rbp-A0h] BYREF | |
int fd; // [rsp+B8h] [rbp-8h] | |
unsigned int v9; // [rsp+BCh] [rbp-4h] | |
file = a1; | |
v5 = a2; | |
v4 = a3; | |
if ( sub_2D9E0(a1, &stat_buf) || (stat_buf.st_mode & 0xF000) == 0x8000 || (stat_buf.st_mode & 0xF000) == 0x4000 ) | |
{ | |
fd = open64(file, 2048); | |
if ( fd == -1 ) | |
{ | |
return 0xFFFFFFFFLL; | |
} | |
else | |
{ | |
if ( v5 ) | |
v9 = ioctl(fd, 0x80086601uLL, v5); | |
else | |
v9 = ioctl(fd, 0x40086602uLL, &v4); | |
sub_2517D(fd); | |
return v9; | |
} | |
} | |
else | |
{ | |
*__errno_location() = 95; | |
return 0xFFFFFFFFLL; | |
} | |
} | |
//----- (000000000002529F) ---------------------------------------------------- | |
__int64 __fastcall sub_2529F(char *a1) | |
{ | |
__int64 v2; // [rsp+10h] [rbp-10h] BYREF | |
unsigned int v3; // [rsp+1Ch] [rbp-4h] | |
v3 = sub_251AB(a1, (__int64)&v2, 0LL); | |
if ( v3 ) | |
{ | |
if ( g_debug_fp ) | |
fprintf(g_debug_fp, "Get attr of file %s failed\n", a1); | |
return v3; | |
} | |
else | |
{ | |
if ( g_debug_fp ) | |
fprintf(g_debug_fp, "File (%s) original attr(%.8lx)\n", a1, v2); | |
v2 = (unsigned int)v2 & 0xFFFFFFCF; | |
if ( g_debug_fp ) | |
fprintf(g_debug_fp, "File (%s) target attr(%.8lx)\n", a1, v2); | |
v3 = sub_251AB(a1, 0LL, v2); | |
if ( v3 ) | |
{ | |
if ( g_debug_fp ) | |
fprintf(g_debug_fp, "Set attr(%lux) of file %s failed\n", v2, a1); | |
return v3; | |
} | |
else | |
{ | |
return 0LL; | |
} | |
} | |
} | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
// 2529F: using guessed type __int64 var_10; | |
//----- (00000000000253D9) ---------------------------------------------------- | |
__int64 __fastcall sub_253D9(char *a1) | |
{ | |
char *ptr; // [rsp+10h] [rbp-20h] BYREF | |
char *v3; // [rsp+18h] [rbp-18h] BYREF | |
struct dirent64 *v4; // [rsp+20h] [rbp-10h] | |
DIR *dirp; // [rsp+28h] [rbp-8h] | |
sub_2529F(a1); | |
dirp = opendir(a1); | |
if ( !dirp ) | |
return 0LL; | |
while ( 1 ) | |
{ | |
v4 = readdir64(dirp); | |
if ( !v4 ) | |
break; | |
if ( v4->d_type == 4 ) | |
{ | |
if ( strcmp(v4->d_name, ".") && strcmp(v4->d_name, "..") ) | |
{ | |
ptr = 0LL; | |
asprintf(&ptr, "%s/%s", a1, v4->d_name); | |
if ( ptr ) | |
{ | |
sub_253D9(ptr); | |
free(ptr); | |
} | |
} | |
} | |
else | |
{ | |
v3 = 0LL; | |
asprintf(&v3, "%s/%s", a1, v4->d_name); | |
if ( v3 ) | |
{ | |
sub_2529F(v3); | |
free(v3); | |
} | |
} | |
} | |
closedir(dirp); | |
return 0LL; | |
} | |
//----- (0000000000025530) ---------------------------------------------------- | |
void __fastcall sub_25530(char *a1) | |
{ | |
int *v1; // rax | |
int *v2; // rax | |
char *ptr; // [rsp+18h] [rbp-8h] BYREF | |
sub_253D9(a1); | |
if ( chmod(a1, 0x1A4u) && g_debug_fp ) | |
{ | |
v1 = __errno_location(); | |
fprintf(g_debug_fp, "chmod '%s' failed(%d)", a1, (unsigned int)*v1); | |
} | |
ptr = 0LL; | |
asprintf(&ptr, "%s.--", a1); | |
if ( ptr ) | |
{ | |
if ( (unsigned int)sub_24FFF(a1, ptr) ) | |
{ | |
if ( g_debug_fp ) | |
{ | |
v2 = __errno_location(); | |
fprintf(g_debug_fp, "rename '%s' to '%s' failed(%d)", a1, ptr, (unsigned int)*v2); | |
} | |
} | |
free(ptr); | |
} | |
} | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
//----- (0000000000025626) ---------------------------------------------------- | |
char *__fastcall sub_25626(const char *a1, int a2) | |
{ | |
int v3; // [rsp+10h] [rbp-10h] | |
int i; // [rsp+14h] [rbp-Ch] | |
char *v5; // [rsp+18h] [rbp-8h] | |
v5 = (char *)a1; | |
if ( a2 ) | |
{ | |
v5 = strdup(a1); | |
if ( !v5 ) | |
exit(12); | |
} | |
v3 = strlen(a1); | |
for ( i = 0; i < v3; ++i ) | |
v5[i] -= 99; | |
return v5; | |
} | |
//----- (00000000000256B0) ---------------------------------------------------- | |
__int64 __fastcall sub_256B0(__int64 a1) | |
{ | |
__int64 result; // rax | |
int i; // [rsp+1Ch] [rbp-14h] | |
for ( i = 0; ; ++i ) | |
{ | |
result = *(_QWORD *)(8LL * i + a1); | |
if ( !result ) | |
break; | |
*(_QWORD *)(8LL * i + a1) = sub_25626(*(const char **)(8LL * i + a1), 1); | |
} | |
return result; | |
} | |
//----- (0000000000025729) ---------------------------------------------------- | |
unsigned int *sub_25729() | |
{ | |
unsigned int *result; // rax | |
result = (unsigned int *)g_keyword_decrypted; | |
if ( !g_keyword_decrypted ) | |
{ | |
sub_256B0((__int64)&plain_keyword_download); | |
sub_256B0((__int64)&plain_keyword_infect_script); | |
sub_256B0((__int64)&plain_keyword_exec_decode); | |
sub_256B0((__int64)&qnap_qpkg_dot_folder); | |
sub_256B0((__int64)&plain_keyword_download_except); | |
sub_256B0((__int64)&g_system_file); | |
result = &g_keyword_decrypted; | |
g_keyword_decrypted = 1; | |
} | |
return result; | |
} | |
// 237040: using guessed type void *plain_keyword_download; | |
// 237060: using guessed type void *plain_keyword_infect_script; | |
// 237080: using guessed type void *plain_keyword_exec_decode; | |
// 2370A0: using guessed type void *plain_keyword_download_except; | |
// 2370C0: using guessed type void *qnap_qpkg_dot_folder; | |
// 237120: using guessed type void *g_system_file; | |
// 237990: using guessed type unsigned int g_keyword_decrypted; | |
//----- (00000000000257A5) ---------------------------------------------------- | |
unsigned int *sub_257A5() | |
{ | |
unsigned int *result; // rax | |
result = (unsigned int *)g_strings_decrypted; | |
if ( !g_strings_decrypted ) | |
{ | |
sub_25626(g_app_name, 0); | |
sub_25626(found_malware_msg_1, 0); | |
sub_25626(found_malware_msg_2, 0); | |
sub_25626(found_malware_msg_3, 0); | |
sub_25626(qpkg_conf, 0); | |
sub_25626(cmd_mount_flash_config, 0); | |
sub_25626(cmd_unmount_flash_config, 0); | |
sub_25626(flash_config_mount_path, 0); | |
sub_25626(cmd_check_flash_config_mount, 0); | |
sub_25626(autorun_sh, 0); | |
sub_25626(runonce, 0); | |
sub_25626(g_debug_file, 0); | |
sub_25626(quarantine_dir, 0); | |
sub_25626(g_internal_log_file, 0); | |
sub_25626(update_pkg_dir, 0); | |
sub_25626(qts_cust_bin, 0); | |
sub_25626(qts_cust_sh, 0); | |
g_strings_decrypted = 1; | |
return sub_25729(); | |
} | |
return result; | |
} | |
// 237994: using guessed type unsigned int g_strings_decrypted; | |
//----- (0000000000025928) ---------------------------------------------------- | |
_BOOL8 __fastcall sub_25928(char a1) | |
{ | |
return !a1 || strchr(" \t\\;\r\n/()<>", a1); | |
} | |
//----- (000000000002596B) ---------------------------------------------------- | |
__int64 __fastcall sub_2596B(const char *a1, __int64 a2) | |
{ | |
char *j; // rax | |
int v3; // ebx | |
char *s; // [rsp+10h] [rbp-30h] | |
char *v6; // [rsp+18h] [rbp-28h] | |
char *haystack; // [rsp+20h] [rbp-20h] | |
int v8; // [rsp+28h] [rbp-18h] | |
int i; // [rsp+2Ch] [rbp-14h] | |
v8 = 4; | |
for ( i = 0; *(_QWORD *)(8LL * i + a2); ++i ) | |
{ | |
if ( (v8 & g_match_type) == 0 ) | |
{ | |
s = *(char **)(8LL * i + a2); | |
for ( j = strstr(a1, s); ; j = strstr(haystack, s) ) | |
{ | |
v6 = j; | |
if ( !j ) | |
break; | |
haystack = &j[strlen(s)]; | |
if ( (v6 == a1 || sub_25928(*(v6 - 1))) && sub_25928(*haystack) ) | |
{ | |
g_match_type |= v8; | |
if ( g_debug_fp ) | |
fprintf(g_debug_fp, "%s:%d:match(%x)(%s, %s)\n", "match_special_keyword", 432LL, g_match_type, a1, s); | |
if ( g_match_keyword_count <= 1023 ) | |
{ | |
v3 = g_match_keyword_count; | |
g_match_keyword_list[v3] = strdup(*(const char **)(8LL * i + a2)); | |
++g_match_keyword_count; | |
} | |
break; | |
} | |
} | |
} | |
v8 *= 2; | |
} | |
return g_match_type; | |
} | |
// 237988: using guessed type unsigned int g_match_type; | |
// 23798C: using guessed type int g_match_keyword_count; | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
// 237A80: using guessed type _QWORD g_match_keyword_list[1024]; | |
//----- (0000000000025B57) ---------------------------------------------------- | |
__int64 __fastcall sub_25B57(const char *a1, __int64 a2, __int64 a3, unsigned int a4) | |
{ | |
char *j; // rax | |
int v5; // ebx | |
char *s; // [rsp+20h] [rbp-30h] | |
char *v10; // [rsp+28h] [rbp-28h] | |
char *haystack; // [rsp+30h] [rbp-20h] | |
int i; // [rsp+3Ch] [rbp-14h] | |
int v13; // [rsp+3Ch] [rbp-14h] | |
if ( a3 ) | |
{ | |
for ( i = 0; *(_QWORD *)(8LL * i + a2); ++i ) | |
; | |
} | |
v13 = 0; | |
LABEL_23: | |
if ( !*(_QWORD *)(8LL * v13 + a2) ) | |
return 0LL; | |
s = *(char **)(8LL * v13 + a2); | |
for ( j = strstr(a1, s); ; j = strstr(haystack, s) ) | |
{ | |
v10 = j; | |
if ( !j ) | |
{ | |
++v13; | |
goto LABEL_23; | |
} | |
if ( g_debug_fp ) | |
fprintf(g_debug_fp, "mstr=%s", j); | |
haystack = &v10[strlen(s)]; | |
if ( (v10 == a1 || sub_25928(*(v10 - 1))) | |
&& sub_25928(*haystack) | |
&& (!a3 || !*(_QWORD *)(8LL * v13 + a3) || !strstr(haystack, *(const char **)(8LL * v13 + a3))) ) | |
{ | |
break; | |
} | |
} | |
if ( g_debug_fp ) | |
fprintf(g_debug_fp, "%s:%d:found keyword(%s,%s)\n", "match_keyword_or", 467LL, a1, s); | |
if ( g_match_keyword_count <= 1023 ) | |
{ | |
v5 = g_match_keyword_count; | |
g_match_keyword_list[v5] = strdup(s); | |
++g_match_keyword_count; | |
} | |
return a4; | |
} | |
// 23798C: using guessed type int g_match_keyword_count; | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
// 237A80: using guessed type _QWORD g_match_keyword_list[1024]; | |
//----- (0000000000025DA3) ---------------------------------------------------- | |
__int64 __fastcall sub_25DA3(const char *a1) | |
{ | |
unsigned int v2; // [rsp+1Ch] [rbp-4h] | |
v2 = 0; | |
if ( (g_match_type & 4) == 0 ) | |
{ | |
sub_2596B(a1, (__int64)&plain_keyword_exec_decode); | |
if ( (g_match_type & 4) != 0 ) | |
return 4LL; | |
} | |
if ( (g_match_type & 1) == 0 ) | |
v2 = sub_25B57(a1, (__int64)&plain_keyword_download, (__int64)&plain_keyword_download_except, 1u); | |
if ( (g_match_type & 2) == 0 ) | |
v2 |= sub_25B57(a1, (__int64)&plain_keyword_infect_script, 0LL, 2u); | |
return v2; | |
} | |
// 237040: using guessed type void *plain_keyword_download; | |
// 237060: using guessed type void *plain_keyword_infect_script; | |
// 237080: using guessed type void *plain_keyword_exec_decode; | |
// 2370A0: using guessed type void *plain_keyword_download_except; | |
// 237988: using guessed type unsigned int g_match_type; | |
//----- (0000000000025E5A) ---------------------------------------------------- | |
char *__fastcall sub_25E5A(const char *a1) | |
{ | |
char *result; // rax | |
result = strchr(a1, 35); | |
if ( result ) | |
*result = 0; | |
return result; | |
} | |
//----- (0000000000025E8B) ---------------------------------------------------- | |
int *sub_25E8B() | |
{ | |
int *result; // rax | |
int i; // [rsp+Ch] [rbp-4h] | |
for ( i = 0; i < g_match_keyword_count; ++i ) | |
free((void *)g_match_keyword_list[i]); | |
result = &g_match_keyword_count; | |
g_match_keyword_count = 0; | |
return result; | |
} | |
// 23798C: using guessed type int g_match_keyword_count; | |
// 237A80: using guessed type _QWORD g_match_keyword_list[1024]; | |
//----- (0000000000025ED6) ---------------------------------------------------- | |
__int64 __fastcall sub_25ED6(const char *a1) | |
{ | |
int v2; // eax | |
char v3; // [rsp+10h] [rbp-1030h] BYREF | |
int v4; // [rsp+1010h] [rbp-30h] | |
int v5; // [rsp+1014h] [rbp-2Ch] | |
int n[2]; // [rsp+1018h] [rbp-28h] | |
char *s; // [rsp+1020h] [rbp-20h] | |
unsigned int v8; // [rsp+102Ch] [rbp-14h] | |
FILE *stream; // [rsp+1030h] [rbp-10h] | |
int i; // [rsp+1038h] [rbp-8h] | |
unsigned int v11; // [rsp+103Ch] [rbp-4h] | |
sub_25729(); | |
g_match_type = 0; | |
sub_25E8B(); | |
if ( !a1 ) | |
return 0LL; | |
v11 = 0; | |
stream = fopen64(a1, "r"); | |
if ( stream ) | |
{ | |
s = &v3; | |
*(_QWORD *)n = 4096LL; | |
while ( fgets(s, n[0], stream) ) | |
{ | |
v2 = strlen(s); | |
v5 = v2 + 1; | |
if ( v2 == -1 ) | |
{ | |
if ( g_debug_fp ) | |
fprintf(g_debug_fp, "%s could be a binary file\n", a1); | |
break; | |
} | |
if ( (unsigned __int64)v5 >= *(_QWORD *)n && g_debug_fp ) | |
fprintf(g_debug_fp, "%s could have a long line\n", a1); | |
sub_25E5A(s); | |
if ( *s ) | |
{ | |
if ( strcmp(s, "\n") ) | |
{ | |
v4 = sub_25DA3(s); | |
g_match_type |= v4; | |
if ( (g_match_type & 4) != 0 || (g_match_type & 3) == 3 ) | |
{ | |
v11 = 1; | |
if ( g_debug_fp ) | |
fprintf(g_debug_fp, "%s infected by %x\n", a1, g_match_type); | |
for ( i = 0; i < g_match_keyword_count; ++i ) | |
{ | |
if ( g_debug_fp ) | |
fprintf(g_debug_fp, "\t%s\n", (const char *)g_match_keyword_list[i]); | |
} | |
break; | |
} | |
} | |
} | |
} | |
fclose(stream); | |
return v11; | |
} | |
else | |
{ | |
v8 = *__errno_location(); | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s:%d:open %s failed(%d)\n", "is_malware_script", 517LL, a1, v8); | |
fflush(g_debug_fp); | |
} | |
*__errno_location() = v8; | |
return 0LL; | |
} | |
} | |
// 237988: using guessed type unsigned int g_match_type; | |
// 23798C: using guessed type int g_match_keyword_count; | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
// 237A80: using guessed type _QWORD g_match_keyword_list[1024]; | |
//----- (00000000000261BD) ---------------------------------------------------- | |
__int64 __fastcall sub_261BD(const char *a1) | |
{ | |
int i; // [rsp+1Ch] [rbp-4h] | |
for ( i = 0; *(&qnap_qpkg_dot_folder + i); ++i ) | |
{ | |
if ( !strcmp(a1, (const char *)*(&qnap_qpkg_dot_folder + i)) ) | |
return 1LL; | |
} | |
return 0LL; | |
} | |
// 2370C0: using guessed type void *qnap_qpkg_dot_folder; | |
//----- (000000000002621E) ---------------------------------------------------- | |
void __fastcall sub_2621E(const char *a1, char *a2) | |
{ | |
char *v2; // [rsp+18h] [rbp-A8h] BYREF | |
struct stat64 stat_buf; // [rsp+20h] [rbp-A0h] BYREF | |
char *ptr; // [rsp+B0h] [rbp-10h] BYREF | |
char *v5; // [rsp+B8h] [rbp-8h] | |
ptr = 0LL; | |
asprintf(&ptr, "%s/%s", a1, quarantine_dir); | |
if ( ptr ) | |
{ | |
if ( sub_2D9E0(ptr, &stat_buf) ) | |
mkdir(ptr, 0x180u); | |
free(ptr); | |
v5 = strrchr(a2, 47); | |
if ( v5 ) | |
{ | |
++v5; | |
v2 = 0LL; | |
asprintf(&v2, "%s/%s/%s", a1, quarantine_dir, v5); | |
if ( v2 ) | |
{ | |
sub_253D9(a2); | |
sub_24FFF(a2, v2); | |
found_special_malware = 1; | |
free(v2); | |
} | |
} | |
} | |
} | |
// 237998: using guessed type unsigned int found_special_malware; | |
//----- (0000000000026362) ---------------------------------------------------- | |
char *__fastcall sub_26362(char *a1, signed int a2) | |
{ | |
*a1 = 0; | |
Get_Private_Profile_String( | |
(__int64)"SHARE_DEF", | |
(__int64)"defVolMP", | |
"/share/CACHEDEV1_DATA", | |
a1, | |
a2, | |
(__int64)"/etc/config/def_share.info"); | |
return a1; | |
} | |
//----- (00000000000263AC) ---------------------------------------------------- | |
void __fastcall sub_263AC(char *a1) | |
{ | |
char v1[256]; // [rsp+10h] [rbp-100h] BYREF | |
sub_26362(v1, 256); | |
if ( v1[0] ) | |
sub_2621E(v1, a1); | |
} | |
//----- (00000000000263F8) ---------------------------------------------------- | |
void __fastcall sub_263F8(__int64 a1, int a2) | |
{ | |
int v2; // eax | |
int v3; // eax | |
int v4; // eax | |
int v5; // eax | |
char *s1[3]; // [rsp+10h] [rbp-40h] | |
void *ptr; // [rsp+28h] [rbp-28h] | |
void *v8; // [rsp+30h] [rbp-20h] | |
int v9; // [rsp+3Ch] [rbp-14h] | |
int v10; // [rsp+40h] [rbp-10h] | |
int j; // [rsp+44h] [rbp-Ch] | |
int i; // [rsp+48h] [rbp-8h] | |
int v13; // [rsp+4Ch] [rbp-4h] | |
v13 = 0; | |
v8 = malloc(4LL * a2); | |
for ( i = 0; i < a2; ++i ) | |
{ | |
if ( g_debug_fp ) | |
{ | |
fprintf( | |
g_debug_fp, | |
"%s:%d:[%s][%s][%s][%s]\n", | |
"_check_qpkg", | |
654LL, | |
(const char *)(11268LL * i + a1), | |
(const char *)(11268LL * i + a1 + 771), | |
(const char *)(11268LL * i + a1 + 1289), | |
(const char *)(11268LL * i + a1 + 5988)); | |
fflush(g_debug_fp); | |
} | |
if ( !strcasecmp((const char *)(11268LL * i + a1 + 771), "TRUE") ) | |
{ | |
s1[0] = (char *)(11268LL * i + a1 + 1289); | |
s1[1] = (char *)(11268LL * i + a1 + 5988); | |
for ( j = 0; j <= 1; ++j ) | |
{ | |
if ( strcmp(s1[j], "null") ) | |
{ | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s:%d:%s,%s\n", "_check_qpkg", 661LL, (const char *)(11268LL * i + a1), s1[j]); | |
fflush(g_debug_fp); | |
} | |
if ( (unsigned int)sub_25ED6(s1[j]) ) | |
{ | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s,%s is infected\n", (const char *)(11268LL * i + a1), s1[j]); | |
fflush(g_debug_fp); | |
} | |
sub_25530(s1[j]); | |
Set_Private_Profile_String(11268LL * i + a1, (__int64)"Enable", (__int64)"FALSE", (__int64)qpkg_conf); | |
if ( v8 ) | |
*((_DWORD *)v8 + v13++) = i; | |
} | |
break; | |
} | |
} | |
} | |
} | |
if ( v13 > 0 ) | |
{ | |
v10 = 3 * (v13 + 1); | |
for ( i = 0; i < v13; ++i ) | |
{ | |
v2 = strlen((const char *)(11268LL * *((int *)v8 + i) + a1)); | |
v10 += v2; | |
} | |
ptr = malloc(v10); | |
if ( ptr ) | |
{ | |
v9 = 0; | |
v3 = snprintf((char *)ptr, v10, "(%s", (const char *)(11268LL * *(int *)v8 + a1)); | |
v9 += v3; | |
for ( i = 1; i < v13 && v10 > v9; ++i ) | |
{ | |
v4 = snprintf((char *)ptr + v9, v10 - v9, ",%s", (const char *)(11268LL * *((int *)v8 + i) + a1)); | |
v9 += v4; | |
} | |
if ( v10 > v9 ) | |
{ | |
v5 = snprintf((char *)ptr + v9, v10 - v9, "%c", 41LL); | |
v9 += v5; | |
} | |
sub_24F33(1LL, 0LL); | |
free(ptr); | |
} | |
} | |
if ( v8 ) | |
free(v8); | |
} | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
//----- (00000000000268B4) ---------------------------------------------------- | |
void sub_268B4() | |
{ | |
void *ptr; // [rsp+0h] [rbp-10h] BYREF | |
int All_QPKG_Info; // [rsp+Ch] [rbp-4h] | |
ptr = 0LL; | |
All_QPKG_Info = Get_All_QPKG_Info(&ptr); | |
if ( ptr && All_QPKG_Info > 0 ) | |
{ | |
sub_263F8((__int64)ptr, All_QPKG_Info); | |
free(ptr); | |
} | |
ptr = 0LL; | |
All_QPKG_Info = Get_All_QFIX_Info(&ptr); | |
if ( ptr ) | |
{ | |
if ( All_QPKG_Info > 0 ) | |
{ | |
sub_263F8((__int64)ptr, All_QPKG_Info); | |
free(ptr); | |
} | |
} | |
} | |
//----- (0000000000026944) ---------------------------------------------------- | |
void sub_26944() | |
{ | |
size_t v0; // rax | |
char *v1; // [rsp+0h] [rbp-30h] BYREF | |
__int64 v2; // [rsp+8h] [rbp-28h] BYREF | |
char *ptr; // [rsp+10h] [rbp-20h] BYREF | |
struct dirent64 *v4; // [rsp+18h] [rbp-18h] | |
DIR *dirp; // [rsp+20h] [rbp-10h] | |
int v6; // [rsp+2Ch] [rbp-4h] | |
v6 = 0; | |
dirp = opendir(update_pkg_dir); | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "checking %s\n", update_pkg_dir); | |
fflush(g_debug_fp); | |
} | |
if ( dirp ) | |
{ | |
while ( 1 ) | |
{ | |
v4 = readdir64(dirp); | |
if ( !v4 ) | |
break; | |
if ( v4->d_type == 8 ) | |
{ | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "checking entry %s\n", v4->d_name); | |
fflush(g_debug_fp); | |
} | |
v0 = strlen(v4->d_name); | |
if ( !strcmp((const char *)&v4->d_off + v0 + 6, ".qfix") ) | |
{ | |
ptr = 0LL; | |
asprintf(&ptr, "%s/%s", update_pkg_dir, v4->d_name); | |
if ( ptr ) | |
{ | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "checking file %s\n", ptr); | |
fflush(g_debug_fp); | |
} | |
v2 = 0LL; | |
if ( !(unsigned int)sub_251AB(ptr, (__int64)&v2, 0LL) ) | |
{ | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s attr %lx\n", ptr, v2); | |
fflush(g_debug_fp); | |
} | |
if ( (v2 & 0x10) != 0 || (v2 & 0x20) != 0 ) | |
{ | |
sub_25530(ptr); | |
v6 = 1; | |
} | |
} | |
free(ptr); | |
} | |
} | |
} | |
} | |
closedir(dirp); | |
if ( !sub_24DA9(qts_cust_sh) ) | |
{ | |
v1 = 0LL; | |
asprintf(&v1, "%s/%s", update_pkg_dir, qts_cust_bin); | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "checking %s\n", v1); | |
fflush(g_debug_fp); | |
} | |
if ( v1 ) | |
{ | |
if ( sub_24DA9(v1) ) | |
{ | |
sub_25530(v1); | |
v6 = 1; | |
} | |
free(v1); | |
} | |
} | |
if ( v6 ) | |
sub_24F33(32LL, 0LL); | |
} | |
} | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
//----- (0000000000026C76) ---------------------------------------------------- | |
__int64 __fastcall sub_26C76(char *a1) | |
{ | |
char *s2[6]; // [rsp+10h] [rbp-40h] | |
int i; // [rsp+44h] [rbp-Ch] | |
char *s1; // [rsp+48h] [rbp-8h] | |
s2[0] = "bash"; | |
s2[1] = "sh"; | |
s2[2] = "php"; | |
s2[3] = "perl"; | |
s2[4] = "python"; | |
s2[5] = 0LL; | |
s1 = strrchr(a1, 47); | |
if ( s1 ) | |
++s1; | |
else | |
s1 = a1; | |
for ( i = 0; s2[i]; ++i ) | |
{ | |
if ( !strcmp(s1, s2[i]) ) | |
return 1LL; | |
} | |
return 0LL; | |
} | |
//----- (0000000000026D33) ---------------------------------------------------- | |
__int64 __fastcall sub_26D33(char *a1) | |
{ | |
char buf[32]; // [rsp+10h] [rbp-C0h] BYREF | |
struct stat64 stat_buf; // [rsp+30h] [rbp-A0h] BYREF | |
int v4; // [rsp+C0h] [rbp-10h] | |
int v5; // [rsp+C4h] [rbp-Ch] | |
int fd; // [rsp+C8h] [rbp-8h] | |
int i; // [rsp+CCh] [rbp-4h] | |
if ( sub_2D9E0(a1, &stat_buf) ) | |
return 0LL; | |
if ( (stat_buf.st_mode & 0xF000) != 0x8000 ) | |
return 0LL; | |
fd = open64(a1, 0); | |
if ( fd == -1 ) | |
return 0LL; | |
v5 = read(fd, buf, 0x18uLL); | |
close(fd); | |
for ( i = 0; *((_DWORD *)&file_type_infos + 4 * i) != 99; ++i ) | |
{ | |
v4 = strlen(*((const char **)&file_type_infos + 2 * i + 1)); | |
if ( v4 <= v5 && !memcmp(buf, *((const void **)&file_type_infos + 2 * i + 1), v5) ) | |
return 0LL; | |
} | |
return 1LL; | |
} | |
//----- (0000000000026E75) ---------------------------------------------------- | |
__int64 __fastcall sub_26E75(const char *a1) | |
{ | |
char *v2; // [rsp+18h] [rbp-48h] BYREF | |
char *save_ptr; // [rsp+20h] [rbp-40h] BYREF | |
char *v4; // [rsp+28h] [rbp-38h] | |
char *delim; // [rsp+30h] [rbp-30h] | |
char *v6; // [rsp+38h] [rbp-28h] | |
char *j; // [rsp+40h] [rbp-20h] | |
int v8; // [rsp+4Ch] [rbp-14h] | |
int v9; // [rsp+50h] [rbp-10h] | |
unsigned int i; // [rsp+54h] [rbp-Ch] | |
char *v11; // [rsp+58h] [rbp-8h] | |
v6 = strdup(a1); | |
if ( !v6 ) | |
return 0LL; | |
delim = "|;"; | |
v4 = "\t <>"; | |
v11 = strtok_r(v6, "|;", &save_ptr); | |
for ( i = 0; v11; v11 = strtok_r(0LL, delim, &save_ptr) ) | |
{ | |
v9 = 0; | |
v8 = 0; | |
for ( j = strtok_r(v11, v4, &v2); j; j = strtok_r(0LL, v4, &v2) ) | |
{ | |
if ( ++v9 > 2 ) | |
break; | |
if ( v9 != 2 || v8 ) | |
{ | |
if ( v9 == 1 && (unsigned int)sub_26C76(j) ) | |
{ | |
v8 = 1; | |
} | |
else | |
{ | |
if ( !(unsigned int)sub_26D33(j) ) | |
break; | |
if ( (unsigned int)sub_25ED6(j) ) | |
{ | |
sub_25530(j); | |
i = 1; | |
goto LABEL_16; | |
} | |
} | |
} | |
} | |
} | |
LABEL_16: | |
free(v6); | |
return i; | |
} | |
//----- (0000000000026FE8) ---------------------------------------------------- | |
FILE *sub_26FE8() | |
{ | |
FILE *result; // rax | |
void *ptr; // [rsp+8h] [rbp-1038h] BYREF | |
int v2[1024]; // [rsp+10h] [rbp-1030h] | |
size_t n; // [rsp+1010h] [rbp-30h] BYREF | |
char *s; // [rsp+1018h] [rbp-28h] BYREF | |
int v5; // [rsp+1024h] [rbp-1Ch] | |
char *v6; // [rsp+1028h] [rbp-18h] | |
FILE *stream; // [rsp+1030h] [rbp-10h] | |
int v8; // [rsp+1038h] [rbp-8h] | |
int v9; // [rsp+103Ch] [rbp-4h] | |
result = fopen64("/etc/config/crontab", "r"); | |
stream = result; | |
if ( result ) | |
{ | |
s = 0LL; | |
n = 0LL; | |
v9 = 0; | |
v8 = 0; | |
while ( getline(&s, &n, stream) > 0 ) | |
{ | |
++v9; | |
v6 = strchr(s, 35); | |
if ( v6 ) | |
*v6 = 0; | |
ptr = 0LL; | |
v5 = sscanf(s, "%*[^ ] %*[^ ] %*[^ ] %*[^ ] %*[^ ] %m[^\r]", &ptr); | |
if ( v5 == 1 ) | |
{ | |
if ( (unsigned int)sub_26E75((const char *)ptr) ) | |
{ | |
found_special_malware = 1; | |
if ( v8 <= 1023 ) | |
v2[v8++] = v9; | |
} | |
free(ptr); | |
} | |
} | |
if ( s ) | |
free(s); | |
result = (FILE *)notified_special_malware; | |
if ( !notified_special_malware ) | |
{ | |
result = (FILE *)found_special_malware; | |
if ( found_special_malware ) | |
{ | |
notified_special_malware = 1; | |
return (FILE *)sub_24F33(2LL, 0LL); | |
} | |
} | |
} | |
return result; | |
} | |
// 237998: using guessed type unsigned int found_special_malware; | |
// 23799C: using guessed type unsigned int notified_special_malware; | |
// 26FE8: using guessed type int var_1030[1024]; | |
//----- (000000000002714C) ---------------------------------------------------- | |
_BOOL8 sub_2714C() | |
{ | |
return system(cmd_check_flash_config_mount) == 0; | |
} | |
//----- (0000000000027169) ---------------------------------------------------- | |
int sub_27169() | |
{ | |
return system(cmd_mount_flash_config); | |
} | |
//----- (000000000002717E) ---------------------------------------------------- | |
int sub_2717E() | |
{ | |
return system(cmd_unmount_flash_config); | |
} | |
//----- (0000000000027193) ---------------------------------------------------- | |
int sub_27193() | |
{ | |
int result; // eax | |
char *ptr; // [rsp+0h] [rbp-10h] BYREF | |
int v2; // [rsp+8h] [rbp-8h] | |
int v3; // [rsp+Ch] [rbp-4h] | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s:%d\n", "check_autorun", 951LL); | |
fflush(g_debug_fp); | |
} | |
v3 = 0; | |
v2 = 0; | |
if ( !sub_2714C() ) | |
{ | |
sub_27169(); | |
v2 = 1; | |
} | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s:%d\n", "check_autorun", 959LL); | |
fflush(g_debug_fp); | |
} | |
ptr = 0LL; | |
asprintf(&ptr, "%s/%s", flash_config_mount_path, autorun_sh); | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s:%d:%s\n", "check_autorun", 963LL, ptr); | |
fflush(g_debug_fp); | |
} | |
if ( ptr ) | |
{ | |
if ( (unsigned int)sub_25ED6(ptr) ) | |
{ | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s:%d\n", "check_autorun", 967LL); | |
fflush(g_debug_fp); | |
} | |
v3 = 1; | |
Enable_Autorun(0LL); | |
sub_25530(ptr); | |
} | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s:%d\n", "check_autorun", 972LL); | |
fflush(g_debug_fp); | |
} | |
free(ptr); | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s:%d\n", "check_autorun", 974LL); | |
fflush(g_debug_fp); | |
} | |
} | |
if ( v2 ) | |
sub_2717E(); | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s:%d\n", "check_autorun", 979LL); | |
fflush(g_debug_fp); | |
} | |
if ( v3 ) | |
sub_24F33(4LL, 0LL); | |
result = (int)g_debug_fp; | |
if ( g_debug_fp ) | |
{ | |
fprintf(g_debug_fp, "%s:%d\n", "check_autorun", 988LL); | |
return fflush(g_debug_fp); | |
} | |
return result; | |
} | |
// 9BA0: using guessed type __int64 __fastcall Enable_Autorun(_QWORD); | |
// 2379A8: using guessed type FILE *g_debug_fp; | |
//----- (00000000000274C6) ---------------------------------------------------- | |
__int64 __fastcall sub_274C6(const char *a1) | |
{ | |
int v2; // [rsp+1Ch] [rbp-14h] | |
char *s1; // [rsp+20h] [rbp-10h] | |
int v4; // [rsp+28h] [rbp-8h] | |
int i; // [rsp+2Ch] [rbp-4h] | |
v4 = strlen(a1); | |
for ( i = 0; *(&g_system_file + i); ++i ) | |
{ | |
s1 = (char *)*(&g_system_file + i); | |
v2 = strlen(s1); | |
if ( v2 <= v4 && !strcmp(s1, &a1[v4 - v2]) ) | |
return 1LL; | |
} | |
return 0LL; | |
} | |
// 237120: using guessed type void *g_system_file; | |
//----- (0000000000027563) ---------------------------------------------------- | |
__int64 __fastcall sub_27563(const char *a1, unsigned int a2, unsigned int a3) | |
{ | |
char *ptr; // [rsp+18h] [rbp-28h] BYREF | |
char *v6; // [rsp+20h] [rbp-20h] BYREF | |
struct dirent64 *v7; // [rsp+28h] [rbp-18h] | |
DIR *dirp; // [rsp+30h] [rbp-10h] | |
unsigned int v9; // [rsp+3Ch] [rbp-4h] | |
v9 = 0; | |
dirp = opendir(a1); | |
if ( dirp ) | |
{ | |
while ( 1 ) | |
{ | |
v7 = readdir64(dirp); | |
if ( !v7 ) | |
break; | |
if ( a2 && v7->d_type == 4 ) | |
{ | |
if ( strcmp(v7->d_name, ".") ) | |
{ | |
if ( strcmp(v7->d_name, "..") ) | |
{ | |
ptr = 0LL; | |
asprintf(&ptr, "%s/%s", a1, v7->d_name); | |
if ( ptr ) | |
{ | |
if ( (unsigned int)sub_27563(ptr, a2, a3) ) | |
v9 = 1; | |
free(ptr); | |
} | |
} | |
} | |
} | |
else | |
{ | |
v6 = 0LL; | |
asprintf(&v6, "%s/%s", a1, v7->d_name); | |
if ( v6 ) | |
{ | |
if ( a3 && (unsigned int)sub_274C6(v6) ) | |
{ | |
free(v6); | |
} | |
else | |
{ | |
if ( (unsigned int)sub_26D33(v6) && (unsigned int)sub_25ED6(v6) ) | |
{ | |
sub_263AC(v6); | |
found_special_malware = 1; | |
v9 = 1; | |
} | |
free(v6); | |
} | |
} | |
} | |
} | |
closedir(dirp); | |
} | |
return v9; | |
} | |
// 237998: using guessed type unsigned int found_special_malware; | |
//----- (000000000002772E) ---------------------------------------------------- | |
__int64 __fastcall sub_2772E(const char *a1) | |
{ | |
char *v2; // [rsp+10h] [rbp-30h] BYREF | |
char *v3; // [rsp+18h] [rbp-28h] BYREF | |
char *ptr; // [rsp+20h] [rbp-20h] BYREF | |
struct dirent64 *v5; // [rsp+28h] [rbp-18h] | |
DIR *dirp; // [rsp+30h] [rbp-10h] | |
unsigned int v7; // [rsp+3Ch] [rbp-4h] | |
ptr = 0LL; | |
asprintf(&ptr, "%s/.qpkg", a1); | |
if ( !ptr ) | |
return 0LL; | |
v7 = 0; | |
dirp = opendir(ptr); | |
if ( dirp ) | |
{ | |
while ( 1 ) | |
{ | |
v5 = readdir64(dirp); | |
if ( !v5 ) | |
break; | |
if ( v5->d_type == 8 ) | |
{ | |
found_special_malware = 1; | |
v7 = 1; | |
v3 = 0LL; | |
asprintf(&v3, "%s/%s", ptr, v5->d_name); | |
if ( v3 ) | |
{ | |
sub_2621E(a1, v3); | |
free(v3); | |
} | |
} | |
else if ( v5->d_name[0] == 46 ) | |
{ | |
if ( strcmp(v5->d_name, ".") ) | |
{ | |
if ( strcmp(v5->d_name, "..") ) | |
{ | |
v2 = 0LL; | |
asprintf(&v2, "%s/%s", ptr, v5->d_name); | |
if ( v2 ) | |
{ | |
if ( (unsigned int)sub_261BD(v5->d_name) ) | |
{ | |
if ( (unsigned int)sub_27563(v2, 1u, 0) ) | |
v7 = 1; | |
} | |
else | |
{ | |
sub_2621E(a1, v2); | |
found_special_malware = 1; | |
v7 = 1; | |
} | |
free(v2); | |
} | |
} | |
} | |
} | |
} | |
closedir(dirp); | |
} | |
free(ptr); | |
return v7; | |
} | |
// 237998: using guessed type unsigned int found_special_malware; | |
//----- (000000000002793C) ---------------------------------------------------- | |
__int64 __fastcall sub_2793C(const char *a1) | |
{ | |
char *ptr; // [rsp+18h] [rbp-28h] BYREF | |
char *v3; // [rsp+20h] [rbp-20h] BYREF | |
struct dirent64 *v4; // [rsp+28h] [rbp-18h] | |
DIR *dirp; // [rsp+30h] [rbp-10h] | |
unsigned int v6; // [rsp+3Ch] [rbp-4h] | |
v6 = 0; | |
dirp = opendir(a1); | |
if ( dirp ) | |
{ | |
while ( 1 ) | |
{ | |
v4 = readdir64(dirp); | |
if ( !v4 ) | |
break; | |
if ( v4->d_type == 4 ) | |
{ | |
if ( v4->d_name[0] == 46 ) | |
{ | |
if ( strcmp(v4->d_name, ".") ) | |
{ | |
if ( strcmp(v4->d_name, "..") ) | |
{ | |
if ( strcmp(".qpkg", v4->d_name) ) | |
{ | |
if ( strcmp("[email protected]", v4->d_name) ) | |
{ | |
if ( strcmp("[email protected]", v4->d_name) ) | |
{ | |
if ( strcmp(quarantine_dir, v4->d_name) ) | |
{ | |
ptr = 0LL; | |
asprintf(&ptr, "%s/%s", a1, v4->d_name); | |
if ( ptr ) | |
{ | |
if ( (unsigned int)sub_27563(ptr, 0, 1u) ) | |
v6 = 1; | |
free(ptr); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else | |
{ | |
v3 = 0LL; | |
asprintf(&v3, "%s/%s", a1, v4->d_name); | |
if ( v3 ) | |
{ | |
if ( (unsigned int)sub_26D33(v3) && (unsigned int)sub_25ED6(v3) ) | |
{ | |
v6 = 1; | |
found_special_malware = 1; | |
sub_25530(v3); | |
} | |
free(v3); | |
} | |
} | |
} | |
closedir(dirp); | |
} | |
return v6; | |
} | |
// 237998: using guessed type unsigned int found_special_malware; | |
//----- (0000000000027B6B) ---------------------------------------------------- | |
__int64 sub_27B6B() | |
{ | |
__int64 result; // rax | |
char v1[264]; // [rsp+0h] [rbp-110h] BYREF | |
__int64 v2; // [rsp+108h] [rbp-8h] | |
v2 = 0LL; | |
sub_26362(v1, 256); | |
result = (unsigned __int8)v1[0]; | |
if ( v1[0] ) | |
{ | |
if ( (unsigned int)sub_2793C(v1) ) | |
v2 |= 0x40uLL; | |
if ( (unsigned int)sub_2772E(v1) ) | |
v2 |= 8uLL; | |
if ( (unsigned int)sub_25ED6(runonce) ) | |
{ | |
found_special_malware = 1; | |
sub_25530(runonce); | |
v2 = 16LL; | |
} | |
result = notified_special_malware; | |
if ( !notified_special_malware ) | |
{ | |
result = found_special_malware; | |
if ( found_special_malware ) | |
{ | |
notified_special_malware = 1; | |
return sub_24F33(v2, 0LL); | |
} | |
} | |
} | |
return result; | |
} | |
// 237998: using guessed type unsigned int found_special_malware; | |
// 23799C: using guessed type unsigned int notified_special_malware; | |
//----- (0000000000027C42) ---------------------------------------------------- | |
__int64 sub_27C42() | |
{ | |
char buf[140]; // [rsp+0h] [rbp-90h] BYREF | |
unsigned int v2; // [rsp+8Ch] [rbp-4h] | |
v2 = readlink("/etc/config", buf, 0x7FuLL); | |
if ( (v2 & 0x80000000) != 0 ) | |
return 0LL; | |
if ( v2 <= 0x7F ) | |
{ | |
buf[v2] = 0; | |
if ( !strcmp(buf, "/mnt/HDA_ROOT/.config") ) | |
return 1LL; | |
} | |
return 0LL; | |
} | |
// 27C42: using guessed type char buf[140]; | |
//----- (0000000000027CB5) ---------------------------------------------------- | |
FILE **check_for_startup() | |
{ | |
sub_257A5(); | |
init_debugger(); | |
if ( (unsigned int)sub_27C42() ) | |
{ | |
sub_27193(); | |
sub_268B4(); | |
sub_26944(); | |
sub_27B6B(); | |
sub_26FE8(); | |
} | |
return finish_debugger(); | |
} | |
//----- (0000000000027D25) ---------------------------------------------------- | |
__int64 NAS_Send_LCD_MSG() | |
{ | |
return 0LL; | |
} | |
// 27D25: using guessed type __int64 NAS_Send_LCD_MSG(); | |
//----- (0000000000027D36) ---------------------------------------------------- | |
__int64 __fastcall SendErrMsgToLcd(int a1, unsigned int a2) | |
{ | |
__int64 s; // [rsp+10h] [rbp-20h] BYREF | |
int v4; // [rsp+18h] [rbp-18h] | |
unsigned int v5; // [rsp+1Ch] [rbp-14h] | |
int v6; // [rsp+28h] [rbp-8h] | |
int msqid; // [rsp+2Ch] [rbp-4h] | |
if ( a2 >= 2 ) | |
return 0xFFFFFFFFLL; | |
msqid = msgget(1456, 1974); | |
if ( msqid >= 0 ) | |
{ | |
msgctl(msqid, 0, 0LL); | |
return 0LL; | |
} | |
else | |
{ | |
memset(&s, 0, 0x18uLL); | |
msqid = msgget(1456, 950); | |
if ( msqid < 0 ) | |
perror("SendErrMsgToLcd - msgget"); | |
s = 1LL; | |
v4 = a1; | |
v5 = a2; | |
v6 = msgsnd(msqid, &s, 0x10uLL, 2048); | |
if ( v6 < 0 ) | |
perror("SendErrMsgToLcd - msgsnd"); | |
return (unsigned int)v6; | |
} | |
} | |
//----- (0000000000027E11) ---------------------------------------------------- | |
__int64 __fastcall SendEnterStateToLcd(int a1) | |
{ | |
__int64 s; // [rsp+10h] [rbp-20h] BYREF | |
int v3; // [rsp+18h] [rbp-18h] | |
int v4; // [rsp+1Ch] [rbp-14h] | |
int v5; // [rsp+28h] [rbp-8h] | |
int msqid; // [rsp+2Ch] [rbp-4h] | |
memset(&s, 0, 0x18uLL); | |
msqid = msgget(1456, 950); | |
if ( msqid < 0 ) | |
perror("SendEnterStateToLcd - msgget"); | |
s = 2LL; | |
v3 = a1; | |
v4 = 0; | |
v5 = msgsnd(msqid, &s, 0x10uLL, 2048); | |
if ( v5 < 0 ) | |
perror("SendEnterStateToLcd - msgsnd"); | |
return (unsigned int)v5; | |
} | |
//----- (0000000000027E9D) ---------------------------------------------------- | |
__int64 __fastcall SendNotificationToLcd(int a1) | |
{ | |
__int64 s; // [rsp+10h] [rbp-20h] BYREF | |
int v3; // [rsp+18h] [rbp-18h] | |
int v4; // [rsp+1Ch] [rbp-14h] | |
int v5; // [rsp+28h] [rbp-8h] | |
int msqid; // [rsp+2Ch] [rbp-4h] | |
memset(&s, 0, 0x18uLL); | |
msqid = msgget(1456, 950); | |
if ( msqid < 0 ) | |
perror("SendNotifyToLcd - msgget"); | |
s = 3LL; | |
v3 = a1; | |
v4 = 0; | |
v5 = msgsnd(msqid, &s, 0x10uLL, 2048); | |
if ( v5 < 0 ) | |
perror("SendNotifyToLcd - msgsnd"); | |
return (unsigned int)v5; | |
} | |
//----- (0000000000027F29) ---------------------------------------------------- | |
__int64 __fastcall SendHalExtentErrMsgToLcd(int a1, int a2, unsigned int a3) | |
{ | |
__int64 msgp; // [rsp+10h] [rbp-20h] BYREF | |
int v6; // [rsp+18h] [rbp-18h] | |
unsigned int v7; // [rsp+1Ch] [rbp-14h] | |
int v8; // [rsp+20h] [rbp-10h] | |
int v9; // [rsp+28h] [rbp-8h] | |
int msqid; // [rsp+2Ch] [rbp-4h] | |
if ( a3 >= 2 ) | |
return 0xFFFFFFFFLL; | |
msqid = msgget(1456, 950); | |
if ( msqid < 0 ) | |
perror("SendHalExtentErrMsgToLcd - msgget"); | |
msgp = 4LL; | |
v6 = a1; | |
v8 = a2; | |
v7 = a3; | |
v9 = msgsnd(msqid, &msgp, 0x10uLL, 2048); | |
if ( v9 < 0 ) | |
perror("SendHalExtentErrMsgToLcd - msgsnd"); | |
return (unsigned int)v9; | |
} | |
//----- (0000000000027FBD) ---------------------------------------------------- | |
__int64 __fastcall SendHalExtentNoticeToLcd(int a1, int a2) | |
{ | |
__int64 msgp; // [rsp+10h] [rbp-20h] BYREF | |
int v4; // [rsp+18h] [rbp-18h] | |
int v5; // [rsp+1Ch] [rbp-14h] | |
int v6; // [rsp+20h] [rbp-10h] | |
int v7; // [rsp+28h] [rbp-8h] | |
int msqid; // [rsp+2Ch] [rbp-4h] | |
msqid = msgget(1456, 950); | |
if ( msqid < 0 ) | |
perror("SendHalExtentNoticeToLcd - msgget"); | |
msgp = 5LL; | |
v4 = a1; | |
v6 = a2; | |
v5 = 0; | |
v7 = msgsnd(msqid, &msgp, 0x10uLL, 2048); | |
if ( v7 < 0 ) | |
perror("SendHalExtentNoticeToLcd - msgsnd"); | |
return (unsigned int)v7; | |
} | |
//----- (000000000002803C) ---------------------------------------------------- | |
__int64 __fastcall SendEVToLogEngine(int a1, const char *a2, const char *a3, const char *a4, const char *a5) | |
{ | |
__int64 msgp[655]; // [rsp+30h] [rbp-1480h] BYREF | |
int msqid; // [rsp+14ACh] [rbp-4h] | |
memset(msgp, 0, sizeof(msgp)); | |
msqid = msgget(1002, 950); | |
msgp[0] = 1LL; | |
HIDWORD(msgp[1]) = a1; | |
snprintf((char *)&msgp[9], 0x41uLL, "%s", a2); | |
snprintf((char *)&msgp[17] + 1, 0x41uLL, "%s", a3); | |
snprintf((char *)&msgp[25] + 2, 0x41uLL, "%s", a4); | |
BYTE4(msgp[289]) = 0; | |
snprintf((char *)&msgp[33] + 3, 0x801uLL, "%s", a5); | |
return (unsigned int)msgsnd(msqid, msgp, dword_2371B0, 2048); | |
} | |
// 2371B0: using guessed type int dword_2371B0; | |
//----- (0000000000028190) ---------------------------------------------------- | |
__int64 SendEVToLogEngineEx(int a1, const char *a2, const char *a3, const char *a4, const char *a5, ...) | |
{ | |
gcc_va_list arg; // [rsp+38h] [rbp-1548h] BYREF | |
__int64 msgp[655]; // [rsp+50h] [rbp-1530h] BYREF | |
int msqid; // [rsp+14CCh] [rbp-B4h] | |
va_start(arg, a5); | |
memset(msgp, 0, sizeof(msgp)); | |
msqid = msgget(1002, 950); | |
msgp[0] = 1LL; | |
HIDWORD(msgp[1]) = a1; | |
snprintf((char *)&msgp[9], 0x41uLL, "%s", a2); | |
snprintf((char *)&msgp[17] + 1, 0x41uLL, "%s", a3); | |
snprintf((char *)&msgp[25] + 2, 0x41uLL, "%s", a4); | |
BYTE4(msgp[289]) = 0; | |
vsnprintf((char *)&msgp[33] + 3, 0x800uLL, a5, arg); | |
return (unsigned int)msgsnd(msqid, msgp, dword_2371B0, 2048); | |
} | |
// 2371B0: using guessed type int dword_2371B0; | |
//----- (0000000000028346) ---------------------------------------------------- | |
__int64 __fastcall SendConnToLogEngine( | |
int a1, | |
const char *a2, | |
const char *a3, | |
const char *a4, | |
int a5, | |
int a6, | |
const char *a7) | |
{ | |
__int64 msgp[656]; // [rsp+30h] [rbp-1490h] BYREF | |
int msqid; // [rsp+14B4h] [rbp-Ch] | |
char *v14; // [rsp+14B8h] [rbp-8h] | |
memset(msgp, 0, 0x1478uLL); | |
v14 = 0LL; | |
msqid = msgget(1002, 950); | |
msgp[0] = 2LL; | |
HIDWORD(msgp[404]) = a1; | |
snprintf((char *)&msgp[412], 0x41uLL, "%s", a2); | |
snprintf((char *)&msgp[420] + 1, 0x41uLL, "%s", a3); | |
snprintf((char *)&msgp[428] + 2, 0x41uLL, "%s", a4); | |
v14 = getenv("HTTP_CLIENT_ID"); | |
if ( v14 ) | |
snprintf((char *)&msgp[598] + 4, 0x41uLL, "%s", v14); | |
v14 = getenv("HTTP_CLIENT_APP"); | |
if ( v14 ) | |
snprintf((char *)&msgp[606] + 5, 0x81uLL, "%s", v14); | |
v14 = getenv("HTTP_CLIENT_AGENT"); | |
if ( v14 ) | |
snprintf((char *)&msgp[622] + 6, 0x100uLL, "%s", v14); | |
HIDWORD(msgp[564]) = a5; | |
LODWORD(msgp[565]) = a6; | |
snprintf((char *)&msgp[436] + 3, 0x401uLL, "%s", a7); | |
return (unsigned int)msgsnd(msqid, msgp, dword_2371B0, 2048); | |
} | |
// 2371B0: using guessed type int dword_2371B0; | |
//----- (000000000002857B) ---------------------------------------------------- | |
__int64 SendConnToLogEngineEx( | |
int a1, | |
const char *a2, | |
const char *a3, | |
const char *a4, | |
int a5, | |
int a6, | |
char *format, | |
...) | |
{ | |
gcc_va_list arg; // [rsp+38h] [rbp-1558h] BYREF | |
__int64 msgp[656]; // [rsp+50h] [rbp-1540h] BYREF | |
int msqid; // [rsp+14D4h] [rbp-BCh] | |
char *v15; // [rsp+14D8h] [rbp-B8h] | |
memset(msgp, 0, 0x1478uLL); | |
v15 = 0LL; | |
msqid = msgget(1002, 950); | |
msgp[0] = 2LL; | |
HIDWORD(msgp[404]) = a1; | |
snprintf((char *)&msgp[412], 0x41uLL, "%s", a2); | |
snprintf((char *)&msgp[420] + 1, 0x41uLL, "%s", a3); | |
snprintf((char *)&msgp[428] + 2, 0x41uLL, "%s", a4); | |
v15 = getenv("HTTP_CLIENT_ID"); | |
if ( v15 ) | |
snprintf((char *)&msgp[598] + 4, 0x41uLL, "%s", v15); | |
v15 = getenv("HTTP_CLIENT_APP"); | |
if ( v15 ) | |
snprintf((char *)&msgp[606] + 5, 0x81uLL, "%s", v15); | |
v15 = getenv("HTTP_CLIENT_AGENT"); | |
if ( v15 ) | |
snprintf((char *)&msgp[622] + 6, 0x100uLL, "%s", v15); | |
HIDWORD(msgp[564]) = a5; | |
LODWORD(msgp[565]) = a6; | |
va_start(arg, format); | |
vsnprintf((char *)&msgp[436] + 3, 0x400uLL, format, arg); | |
return (unsigned int)msgsnd(msqid, msgp, dword_2371B0, 2048); | |
} | |
// 2371B0: using guessed type int dword_2371B0; | |
//----- (0000000000028827) ---------------------------------------------------- | |
__int64 SendConnToLogEngineEx2( | |
int a1, | |
const char *a2, | |
const char *a3, | |
const char *a4, | |
const char *a5, | |
int a6, | |
int a7, | |
char *format, | |
...) | |
{ | |
gcc_va_list arg; // [rsp+38h] [rbp-1558h] BYREF | |
__int64 msgp[656]; // [rsp+50h] [rbp-1540h] BYREF | |
int msqid; // [rsp+14D4h] [rbp-BCh] | |
char *v16; // [rsp+14D8h] [rbp-B8h] | |
memset(msgp, 0, 0x1478uLL); | |
v16 = 0LL; | |
msqid = msgget(1002, 950); | |
msgp[0] = 2LL; | |
HIDWORD(msgp[404]) = a1; | |
snprintf((char *)&msgp[412], 0x41uLL, "%s", a2); | |
snprintf((char *)&msgp[565] + 4, 0x101uLL, "%s", a3); | |
snprintf((char *)&msgp[420] + 1, 0x41uLL, "%s", a4); | |
snprintf((char *)&msgp[428] + 2, 0x41uLL, "%s", a5); | |
v16 = getenv("HTTP_CLIENT_ID"); | |
if ( v16 ) | |
snprintf((char *)&msgp[598] + 4, 0x41uLL, "%s", v16); | |
v16 = getenv("HTTP_CLIENT_APP"); | |
if ( v16 ) | |
snprintf((char *)&msgp[606] + 5, 0x81uLL, "%s", v16); | |
v16 = getenv("HTTP_CLIENT_AGENT"); | |
if ( v16 ) | |
snprintf((char *)&msgp[622] + 6, 0x100uLL, "%s", v16); | |
HIDWORD(msgp[564]) = a6; | |
LODWORD(msgp[565]) = a7; | |
va_start(arg, format); | |
vsnprintf((char *)&msgp[436] + 3, 0x400uLL, format, arg); | |
return (unsigned int)msgsnd(msqid, msgp, dword_2371B0, 2048); | |
} | |
// 2371B0: using guessed type int dword_2371B0; | |
//----- (0000000000028B01) ---------------------------------------------------- | |
__int64 SendConnToLogEngineEx3( | |
int a1, | |
const char *a2, | |
const char *a3, | |
const char *a4, | |
const char *a5, | |
int a6, | |
int a7, | |
char *format, | |
int a9, | |
...) | |
{ | |
__int64 msgp[655]; // [rsp+30h] [rbp-1550h] BYREF | |
gcc_va_list arg; // [rsp+14A8h] [rbp-D8h] BYREF | |
int msqid; // [rsp+14C4h] [rbp-BCh] | |
char *v17; // [rsp+14C8h] [rbp-B8h] | |
memset(msgp, 0, sizeof(msgp)); | |
v17 = 0LL; | |
msqid = msgget(1002, 950); | |
msgp[0] = 2LL; | |
HIDWORD(msgp[404]) = a1; | |
snprintf((char *)&msgp[412], 0x41uLL, "%s", a2); | |
snprintf((char *)&msgp[565] + 4, 0x101uLL, "%s", a3); | |
snprintf((char *)&msgp[420] + 1, 0x41uLL, "%s", a4); | |
snprintf((char *)&msgp[428] + 2, 0x41uLL, "%s", a5); | |
v17 = getenv("HTTP_CLIENT_ID"); | |
if ( v17 ) | |
snprintf((char *)&msgp[598] + 4, 0x41uLL, "%s", v17); | |
v17 = getenv("HTTP_CLIENT_APP"); | |
if ( v17 ) | |
snprintf((char *)&msgp[606] + 5, 0x81uLL, "%s", v17); | |
v17 = getenv("HTTP_CLIENT_AGENT"); | |
if ( v17 ) | |
snprintf((char *)&msgp[622] + 6, 0x100uLL, "%s", v17); | |
HIDWORD(msgp[564]) = a6; | |
LODWORD(msgp[565]) = a7; | |
LODWORD(msgp[598]) = a9; | |
va_start(arg, a9); | |
vsnprintf((char *)&msgp[436] + 3, 0x400uLL, format, arg); | |
return (unsigned int)msgsnd(msqid, msgp, dword_2371B0, 2048); | |
} | |
// 2371B0: using guessed type int dword_2371B0; | |
//----- (0000000000028DE4) ---------------------------------------------------- | |
__int64 SendConnToLogEngineEx4( | |
int a1, | |
const char *a2, | |
const char *a3, | |
const char *a4, | |
const char *a5, | |
int a6, | |
int a7, | |
int a8, | |
const char *a9, | |
const char *a10, | |
const char *a11, | |
char *format, | |
...) | |
{ | |
const char *v12; // rax | |
const char *v13; // rax | |
const char *v14; // rax | |
__int64 msgp[655]; // [rsp+30h] [rbp-1550h] BYREF | |
gcc_va_list arg; // [rsp+14A8h] [rbp-D8h] BYREF | |
int msqid; // [rsp+14C4h] [rbp-BCh] | |
char *v23; // [rsp+14C8h] [rbp-B8h] | |
memset(msgp, 0, sizeof(msgp)); | |
v23 = 0LL; | |
msqid = msgget(1002, 950); | |
msgp[0] = 2LL; | |
HIDWORD(msgp[404]) = a1; | |
HIDWORD(msgp[564]) = a6; | |
LODWORD(msgp[565]) = a7; | |
LODWORD(msgp[598]) = a8; | |
snprintf((char *)&msgp[420] + 1, 0x41uLL, "%s", a4); | |
snprintf((char *)&msgp[565] + 4, 0x101uLL, "%s", a3); | |
snprintf((char *)&msgp[412], 0x41uLL, "%s", a2); | |
snprintf((char *)&msgp[428] + 2, 0x41uLL, "%s", a5); | |
if ( a9 || (v23 = getenv("HTTP_CLIENT_ID")) != 0LL ) | |
{ | |
if ( a9 ) | |
v12 = a9; | |
else | |
v12 = v23; | |
snprintf((char *)&msgp[598] + 4, 0x41uLL, "%s", v12); | |
} | |
if ( a10 || (v23 = getenv("HTTP_CLIENT_APP")) != 0LL ) | |
{ | |
if ( a10 ) | |
v13 = a10; | |
else | |
v13 = v23; | |
snprintf((char *)&msgp[606] + 5, 0x81uLL, "%s", v13); | |
} | |
if ( a11 || (v23 = getenv("HTTP_CLIENT_AGENT")) != 0LL ) | |
{ | |
if ( a11 ) | |
v14 = a11; | |
else | |
v14 = v23; | |
snprintf((char *)&msgp[622] + 6, 0x100uLL, "%s", v14); | |
} | |
va_start(arg, format); | |
vsnprintf((char *)&msgp[436] + 3, 0x400uLL, format, arg); | |
return (unsigned int)msgsnd(msqid, msgp, dword_2371B0, 2048); | |
} | |
// 2371B0: using guessed type int dword_2371B0; | |
//----- (0000000000029103) ---------------------------------------------------- | |
__int64 __fastcall SendNoticeToLogEngine_V2( | |
int a1, | |
unsigned int a2, | |
unsigned int a3, | |
const char *a4, | |
int a5, | |
const char *a6, | |
int a7, | |
int a8, | |
int a9, | |
const char *a10, | |
const char *a11, | |
const char *a12, | |
const char *a13, | |
int a14, | |
const char *a15, | |
const char *a16, | |
const char *a17, | |
const char *a18, | |
const char *a19) | |
{ | |
__int64 msgp[891]; // [rsp+20h] [rbp-1BE0h] BYREF | |
int msqid; // [rsp+1BFCh] [rbp-4h] | |
memset(msgp, 0, 0x1BD0uLL); | |
msqid = msgget(10121, 950); | |
msgp[0] = 3LL; | |
HIDWORD(msgp[1]) = a1; | |
msgp[2] = __PAIR64__(a3, a2); | |
snprintf((char *)&msgp[3], 0x401uLL, "%s", a4); | |
HIDWORD(msgp[131]) = a5; | |
snprintf((char *)&msgp[679] + 5, 0x81uLL, "%s", a6); | |
LODWORD(msgp[696]) = a7; | |
if ( a13 ) | |
snprintf((char *)&msgp[414] + 4, 0x41uLL, "%s", a13); | |
else | |
WORD2(msgp[414]) = 48; | |
LODWORD(msgp[423]) = a14; | |
snprintf((char *)&msgp[423] + 4, 0x801uLL, "%s", a15); | |
snprintf((char *)&msgp[134], 0x41uLL, "%s", a10); | |
snprintf((char *)&msgp[142] + 1, 0x41uLL, "%s", a11); | |
snprintf((char *)&msgp[150] + 2, 0x41uLL, "%s", a12); | |
snprintf((char *)&msgp[158] + 3, 0x801uLL, "%s", a16); | |
HIDWORD(msgp[696]) = a8; | |
LODWORD(msgp[697]) = a9; | |
snprintf((char *)&msgp[697] + 4, 0x101uLL, "%s", a17); | |
snprintf((char *)&msgp[729] + 5, 0x401uLL, "%s", a18); | |
snprintf((char *)&msgp[857] + 6, 0x101uLL, "%s", a19); | |
return (unsigned int)msgsnd(msqid, msgp, 0x1BC8uLL, 2048); | |
} | |
//----- (00000000000293D7) ---------------------------------------------------- | |
__int64 __fastcall SendNoticeToLogEngine( | |
int a1, | |
unsigned int a2, | |
unsigned int a3, | |
const char *a4, | |
int a5, | |
const char *a6, | |
int a7, | |
int a8, | |
int a9, | |
const char *a10, | |
const char *a11, | |
const char *a12, | |
const char *a13, | |
int a14, | |
const char *a15, | |
const char *a16) | |
{ | |
return SendNoticeToLogEngine_V2( | |
a1, | |
a2, | |
a3, | |
a4, | |
a5, | |
a6, | |
a7, | |
a8, | |
a9, | |
a10, | |
a11, | |
a12, | |
a13, | |
a14, | |
a15, | |
a16, | |
byte_2FA8E, | |
byte_2FA8E, | |
byte_2FA8E); | |
} | |
//----- (0000000000029466) ---------------------------------------------------- | |
__int64 SendNoticeToLogEngineEx( | |
int a1, | |
unsigned int a2, | |
unsigned int a3, | |
const char *a4, | |
int a5, | |
const char *a6, | |
int a7, | |
int a8, | |
int a9, | |
const char *a10, | |
const char *a11, | |
const char *a12, | |
const char *a13, | |
int a14, | |
const char *a15, | |
char *format, | |
...) | |
{ | |
gcc_va_list arg; // [rsp+28h] [rbp-1CA8h] BYREF | |
__int64 msgp[891]; // [rsp+40h] [rbp-1C90h] BYREF | |
int msqid; // [rsp+1C1Ch] [rbp-B4h] | |
memset(msgp, 0, 0x1BD0uLL); | |
msqid = msgget(10121, 950); | |
msgp[0] = 3LL; | |
HIDWORD(msgp[1]) = a1; | |
msgp[2] = __PAIR64__(a3, a2); | |
snprintf((char *)&msgp[3], 0x401uLL, "%s", a4); | |
HIDWORD(msgp[131]) = a5; | |
snprintf((char *)&msgp[679] + 5, 0x81uLL, "%s", a6); | |
LODWORD(msgp[696]) = a7; | |
if ( a13 ) | |
snprintf((char *)&msgp[414] + 4, 0x41uLL, "%s", a13); | |
else | |
WORD2(msgp[414]) = 48; | |
LODWORD(msgp[423]) = a14; | |
snprintf((char *)&msgp[423] + 4, 0x801uLL, "%s", a15); | |
snprintf((char *)&msgp[134], 0x41uLL, "%s", a10); | |
snprintf((char *)&msgp[142] + 1, 0x41uLL, "%s", a11); | |
snprintf((char *)&msgp[150] + 2, 0x41uLL, "%s", a12); | |
HIDWORD(msgp[696]) = a8; | |
LODWORD(msgp[697]) = a9; | |
BYTE4(msgp[697]) = 0; | |
BYTE5(msgp[729]) = 0; | |
BYTE6(msgp[857]) = 0; | |
va_start(arg, format); | |
vsnprintf((char *)&msgp[158] + 3, 0x800uLL, format, arg); | |
return (unsigned int)msgsnd(msqid, msgp, 0x1BC8uLL, 2048); | |
} | |
//----- (0000000000029735) ---------------------------------------------------- | |
__int64 __fastcall SendEVMsgidToLogEngine( | |
int a1, | |
const char *a2, | |
const char *a3, | |
const char *a4, | |
const char *a5, | |
const char *a6) | |
{ | |
__int64 msgp[655]; // [rsp+30h] [rbp-1480h] BYREF | |
int msqid; // [rsp+14ACh] [rbp-4h] | |
memset(msgp, 0, sizeof(msgp)); | |
msqid = msgget(1002, 950); | |
msgp[0] = 1LL; | |
HIDWORD(msgp[1]) = a1; | |
snprintf((char *)&msgp[9], 0x41uLL, "%s", a2); | |
snprintf((char *)&msgp[17] + 1, 0x41uLL, "%s", a3); | |
snprintf((char *)&msgp[25] + 2, 0x41uLL, "%s", a4); | |
snprintf((char *)&msgp[289] + 4, 0x41uLL, "%s", a5); | |
snprintf((char *)&msgp[33] + 3, 0x801uLL, "%s", a6); | |
return (unsigned int)msgsnd(msqid, msgp, dword_2371B0, 2048); | |
} | |
// 2371B0: using guessed type int dword_2371B0; | |
//----- (00000000000298B3) ---------------------------------------------------- | |
__int64 SendEVMsgidToLogEngineEx( | |
int a1, | |
const char *a2, | |
const char *a3, | |
const char *a4, | |
const char *a5, | |
const char *a6, | |
...) | |
{ | |
gcc_va_list arg; // [rsp+38h] [rbp-1548h] BYREF | |
__int64 msgp[655]; // [rsp+50h] [rbp-1530h] BYREF | |
int msqid; // [rsp+14CCh] [rbp-B4h] | |
va_start(arg, a6); | |
memset(msgp, 0, sizeof(msgp)); | |
msqid = msgget(1002, 950); | |
msgp[0] = 1LL; | |
HIDWORD(msgp[1]) = a1; | |
snprintf((char *)&msgp[9], 0x41uLL, "%s", a2); | |
snprintf((char *)&msgp[17] + 1, 0x41uLL, "%s", a3); | |
snprintf((char *)&msgp[25] + 2, 0x41uLL, "%s", a4); | |
snprintf((char *)&msgp[289] + 4, 0x41uLL, "%s", a5); | |
vsnprintf((char *)&msgp[33] + 3, 0x800uLL, a6, arg); | |
return (unsigned int)msgsnd(msqid, msgp, dword_2371B0, 2048); | |
} | |
// 2371B0: using guessed type int dword_2371B0; | |
//----- (0000000000029A8C) ---------------------------------------------------- | |
__int64 SendEventToQSyslogd() | |
{ | |
return 0LL; | |
} | |
// 29A8C: using guessed type __int64 SendEventToQSyslogd(); | |
//----- (0000000000029AAE) ---------------------------------------------------- | |
__int64 SendConnToQSyslogd() | |
{ | |
return 0LL; | |
} | |
// 29AAE: using guessed type __int64 SendConnToQSyslogd(); | |
//----- (0000000000029AD0) ---------------------------------------------------- | |
char ***__fastcall set_proc_title_init(int a1, _QWORD *a2) | |
{ | |
const char *v2; // rbx | |
const char *v3; // rax | |
char ***result; // rax | |
char **v5; // [rsp+18h] [rbp-28h] | |
int i; // [rsp+2Ch] [rbp-14h] | |
int j; // [rsp+2Ch] [rbp-14h] | |
for ( i = 0; environ[i]; ++i ) | |
; | |
if ( i ) | |
v2 = environ[i - 1]; | |
else | |
v2 = (const char *)a2[a1 - 1]; | |
v3 = &v2[strlen(v2)]; | |
qword_2379B0 = (__int64)a2; | |
maxlen = (size_t)&v3[-*a2]; | |
v5 = (char **)malloc(8LL * (unsigned int)(i + 1)); | |
for ( j = 0; environ[j]; ++j ) | |
v5[j] = strdup(environ[j]); | |
v5[j] = 0LL; | |
result = &environ; | |
environ = v5; | |
return result; | |
} | |
// 2379B0: using guessed type __int64 qword_2379B0; | |
//----- (0000000000029C5B) ---------------------------------------------------- | |
__int64 set_proc_title(const char *a1, ...) | |
{ | |
__int64 result; // rax | |
gcc_va_list arg; // [rsp+10h] [rbp-D0h] BYREF | |
size_t v3; // [rsp+28h] [rbp-B8h] | |
result = qword_2379B0; | |
if ( qword_2379B0 ) | |
{ | |
va_start(arg, a1); | |
vsnprintf(*(char **)qword_2379B0, maxlen, a1, arg); | |
v3 = strlen(*(const char **)qword_2379B0); | |
memset((void *)(v3 + *(_QWORD *)qword_2379B0), 0, maxlen - v3); | |
result = qword_2379B0 + 8; | |
*(_QWORD *)(qword_2379B0 + 8) = 0LL; | |
} | |
return result; | |
} | |
// 2379B0: using guessed type __int64 qword_2379B0; | |
//----- (0000000000029D78) ---------------------------------------------------- | |
_BYTE *__fastcall sub_29D78(_BYTE *a1, _BYTE *a2) | |
{ | |
_BYTE *v2; // rax | |
_BYTE *v3; // rdx | |
_BYTE *v4; // rax | |
_BYTE *v5; // rdx | |
_BYTE *v7; // rax | |
_BYTE *v8; // rdx | |
_BYTE *v10; // [rsp+0h] [rbp-20h] | |
_BYTE *v12; // [rsp+10h] [rbp-10h] | |
_BYTE *v13; // [rsp+18h] [rbp-8h] | |
while ( ((*__ctype_b_loc())[(char)*a2] & 0x2000) != 0 ) | |
++a2; | |
while ( *a2 && ((*__ctype_b_loc())[(char)*a2] & 0x2000) == 0 ) | |
{ | |
if ( *a2 == 58 ) | |
{ | |
v13 = a2; | |
v12 = a1; | |
v2 = a1++; | |
v3 = a2; | |
v10 = a2 + 1; | |
*v2 = *v3; | |
while ( ((*__ctype_b_loc())[(char)*v10] & 0x800) != 0 ) | |
{ | |
v4 = a1++; | |
v5 = v10++; | |
*v4 = *v5; | |
} | |
if ( *v10 != 58 ) | |
{ | |
v10 = v13; | |
a1 = v12; | |
} | |
if ( !*v10 ) | |
return 0LL; | |
a2 = v10 + 1; | |
break; | |
} | |
v7 = a1++; | |
v8 = a2++; | |
*v7 = *v8; | |
} | |
*a1 = 0; | |
return a2; | |
} | |
//----- (0000000000029EE1) ---------------------------------------------------- | |
__int64 __fastcall sub_29EE1(const char *a1, __int64 a2) | |
{ | |
sscanf( | |
a1, | |
"%llu %llu %lu %lu %lu %lu %lu %lu %llu %llu %lu %lu %lu %lu %lu %lu", | |
a2 + 16, | |
a2, | |
a2 + 32, | |
a2 + 48, | |
a2 + 128, | |
a2 + 120, | |
a2 + 72, | |
a2 + 64, | |
a2 + 24, | |
a2 + 8, | |
a2 + 40, | |
a2 + 56, | |
a2 + 160, | |
a2 + 88, | |
a2 + 152, | |
a2 + 80); | |
return 0LL; | |
} | |
//----- (0000000000029FDC) ---------------------------------------------------- | |
__int64 __fastcall read_net_proc(const char *a1, __int64 a2) | |
{ | |
size_t v3; // rax | |
char s1[16]; // [rsp+10h] [rbp-220h] BYREF | |
char s[512]; // [rsp+20h] [rbp-210h] BYREF | |
const char *v6; // [rsp+220h] [rbp-10h] | |
FILE *stream; // [rsp+228h] [rbp-8h] | |
stream = 0LL; | |
if ( !a1 ) | |
return 0xFFFFFFFFLL; | |
stream = fopen64("/proc/net/dev", "r"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
fgets(s, 512, stream); | |
fgets(s, 512, stream); | |
while ( fgets(s, 512, stream) ) | |
{ | |
v6 = sub_29D78(s1, s); | |
v3 = strlen(a1); | |
if ( !strncmp(s1, a1, v3) ) | |
sub_29EE1(v6, a2); | |
} | |
fclose(stream); | |
return 0LL; | |
} | |
//----- (000000000002A0FD) ---------------------------------------------------- | |
int ctor_001() | |
{ | |
return regcomp( | |
&preg, | |
"(\\b|/)(ash|bash|csh|jsh|ksh|ksh93|pfcsh|pfksh|pfsh|pfsh|rbash|rksh93|sh|tcsh|zsh|busybox|php|python.*)$", | |
1); | |
} | |
//----- (000000000002A11B) ---------------------------------------------------- | |
void dtor_001() | |
{ | |
regfree(&preg); | |
} | |
//----- (000000000002A12D) ---------------------------------------------------- | |
int *__fastcall qnap_auto_close_fd(int *a1) | |
{ | |
int *result; // rax | |
if ( a1 ) | |
{ | |
result = (int *)(unsigned int)*a1; | |
if ( (int)result >= 0 ) | |
{ | |
close(*a1); | |
result = a1; | |
*a1 = -1; | |
} | |
} | |
return result; | |
} | |
//----- (000000000002A165) ---------------------------------------------------- | |
void *__fastcall qnap_auto_free_char(void **a1) | |
{ | |
void *result; // rax | |
if ( a1 ) | |
{ | |
result = *a1; | |
if ( *a1 ) | |
{ | |
free(*a1); | |
result = a1; | |
*a1 = 0LL; | |
} | |
} | |
return result; | |
} | |
//----- (000000000002A1A2) ---------------------------------------------------- | |
FILE *__fastcall qnap_auto_close_file(FILE **a1) | |
{ | |
FILE *result; // rax | |
if ( a1 ) | |
{ | |
result = *a1; | |
if ( *a1 ) | |
{ | |
fclose(*a1); | |
result = (FILE *)a1; | |
*a1 = 0LL; | |
} | |
} | |
return result; | |
} | |
//----- (000000000002A1DF) ---------------------------------------------------- | |
_QWORD *__fastcall qnap_auto_close_popen_file(_QWORD *a1) | |
{ | |
_QWORD *result; // rax | |
if ( a1 ) | |
{ | |
result = (_QWORD *)*a1; | |
if ( *a1 ) | |
{ | |
qnap_pclose(*a1); | |
result = a1; | |
*a1 = 0LL; | |
} | |
} | |
return result; | |
} | |
// A180: using guessed type __int64 __fastcall qnap_pclose(_QWORD); | |
//----- (000000000002A21C) ---------------------------------------------------- | |
void *__fastcall sub_2A21C(void **a1) | |
{ | |
void *result; // rax | |
if ( a1 ) | |
{ | |
result = *a1; | |
if ( *a1 ) | |
{ | |
free(*a1); | |
result = a1; | |
*a1 = 0LL; | |
} | |
} | |
return result; | |
} | |
//----- (000000000002A259) ---------------------------------------------------- | |
__int64 __fastcall qnap_mktmpname(char *a1) | |
{ | |
int fd; // [rsp+1Ch] [rbp-4h] | |
if ( !a1 ) | |
return 0xFFFFFFFFLL; | |
fd = mkstemp64(a1); | |
if ( fd < 0 ) | |
return 0xFFFFFFFFLL; | |
close(fd); | |
return 0LL; | |
} | |
//----- (000000000002A2A0) ---------------------------------------------------- | |
size_t __fastcall erase_char(const char *a1) | |
{ | |
size_t result; // rax | |
char *v2; // rax | |
const char *v3; // rdx | |
int v4; // [rsp+1Ch] [rbp-14h] | |
const char *j; // [rsp+20h] [rbp-10h] | |
const char *v6; // [rsp+20h] [rbp-10h] | |
const char *i; // [rsp+28h] [rbp-8h] | |
v4 = 0; | |
result = strlen(a1); | |
if ( (_DWORD)result ) | |
{ | |
for ( i = a1; *i == 32 || *i == 9 || *i == 13 || *i == 10; ++i ) | |
++v4; | |
if ( v4 < (int)result ) | |
{ | |
for ( j = &a1[(int)result - 1]; *j == 32 || *j == 9 || *j == 13 || *j == 10; --j ) | |
; | |
*((_BYTE *)j + 1) = 0; | |
v6 = a1; | |
while ( *i ) | |
{ | |
v2 = (char *)v6++; | |
v3 = i++; | |
*v2 = *v3; | |
} | |
result = (size_t)v6; | |
*v6 = 0; | |
} | |
else | |
{ | |
result = (size_t)a1; | |
*a1 = 0; | |
} | |
} | |
return result; | |
} | |
//----- (000000000002A3B4) ---------------------------------------------------- | |
const char *__fastcall stripe_white_space_tail(const char *a1) | |
{ | |
const char *i; // [rsp+18h] [rbp-8h] | |
if ( *a1 ) | |
{ | |
for ( i = &a1[strlen(a1) - 1]; *i == 32 || *i == 9; --i ) | |
; | |
*((_BYTE *)i + 1) = 0; | |
} | |
return a1; | |
} | |
//----- (000000000002A414) ---------------------------------------------------- | |
_BOOL8 __fastcall string_ended_with_EOL(const char *a1) | |
{ | |
return a1[strlen(a1) - 1] == 10; | |
} | |
//----- (000000000002A44C) ---------------------------------------------------- | |
__int64 __fastcall strip_EOL(const char *a1) | |
{ | |
if ( a1[strlen(a1) - 1] != 10 ) | |
return 0LL; | |
a1[strlen(a1) - 1] = 0; | |
if ( a1[strlen(a1) - 1] == 13 ) | |
a1[strlen(a1) - 1] = 0; | |
return 1LL; | |
} | |
//----- (000000000002A4D6) ---------------------------------------------------- | |
char *__fastcall combine_string(const char *a1, const char *a2) | |
{ | |
int v2; // ebx | |
int v3; // eax | |
char *dest; // [rsp+10h] [rbp-20h] | |
v2 = strlen(a1); | |
v3 = strlen(a2); | |
dest = (char *)malloc(v2 + v3 + 1); | |
if ( dest ) | |
{ | |
strcpy(dest, a1); | |
strcat(dest, a2); | |
} | |
return dest; | |
} | |
//----- (000000000002A552) ---------------------------------------------------- | |
char *__fastcall skip_to_EOL(FILE *a1) | |
{ | |
char *result; // rax | |
char s[1024]; // [rsp+10h] [rbp-400h] BYREF | |
for ( result = fgets(s, 1024, a1); result; result = fgets(s, 1024, a1) ) | |
{ | |
result = (char *)string_ended_with_EOL(s); | |
if ( (_DWORD)result ) | |
break; | |
} | |
return result; | |
} | |
//----- (000000000002A59B) ---------------------------------------------------- | |
_BYTE *__fastcall skip_white_space(_BYTE *a1) | |
{ | |
while ( *a1 == 32 || *a1 == 9 ) | |
++a1; | |
return a1; | |
} | |
//----- (000000000002A5CE) ---------------------------------------------------- | |
__int64 __fastcall get_one_line_of_string(FILE *a1) | |
{ | |
void **addr; // rax | |
char *v2; // rax | |
const char *v4; // rax | |
const char *v5; // rax | |
char *v6; // rbx | |
const char *v7; // rbx | |
const char *v8; // rsi | |
void **v9; // rax | |
const char **v10; // rax | |
char *v11; // rax | |
char *v12; // [rsp+18h] [rbp-18h] | |
if ( *(_QWORD *)__tls_get_addr(&stru_2355D0) ) | |
{ | |
addr = (void **)__tls_get_addr(&stru_2355D0); | |
free(*addr); | |
*(_QWORD *)__tls_get_addr(&stru_2355D0) = 0LL; | |
} | |
v2 = (char *)__tls_get_addr(&qword_2355E0); | |
if ( !fgets(v2, 4096, a1) ) | |
return 0LL; | |
v4 = (const char *)__tls_get_addr(&qword_2355E0); | |
if ( (unsigned int)strip_EOL(v4) ) | |
return __tls_get_addr(&qword_2355E0); | |
v5 = (const char *)__tls_get_addr(&qword_2355E0); | |
v6 = strdup(v5); | |
*(_QWORD *)__tls_get_addr(&stru_2355D0) = v6; | |
if ( *(_QWORD *)__tls_get_addr(&stru_2355D0) ) | |
{ | |
do | |
{ | |
v11 = (char *)__tls_get_addr(&qword_2355E0); | |
if ( !fgets(v11, 4096, a1) ) | |
break; | |
v7 = *(const char **)__tls_get_addr(&stru_2355D0); | |
v8 = (const char *)__tls_get_addr(&qword_2355E0); | |
v12 = combine_string(v7, v8); | |
if ( !v12 ) | |
{ | |
skip_to_EOL(a1); | |
return *(_QWORD *)__tls_get_addr(&stru_2355D0); | |
} | |
v9 = (void **)__tls_get_addr(&stru_2355D0); | |
free(*v9); | |
*(_QWORD *)__tls_get_addr(&stru_2355D0) = v12; | |
v10 = (const char **)__tls_get_addr(&stru_2355D0); | |
} | |
while ( !(unsigned int)strip_EOL(*v10) ); | |
return *(_QWORD *)__tls_get_addr(&stru_2355D0); | |
} | |
else | |
{ | |
skip_to_EOL(a1); | |
return __tls_get_addr(&qword_2355E0); | |
} | |
} | |
// A280: using guessed type __int64 __fastcall __tls_get_addr(_QWORD); | |
// 2355D0: using guessed type tls_index_local stru_2355D0; | |
// 2355E0: using guessed type __int64 qword_2355E0; | |
//----- (000000000002A7EF) ---------------------------------------------------- | |
__int64 __fastcall get_uid_by_name(const char *a1) | |
{ | |
struct passwd *v2; // [rsp+18h] [rbp-8h] | |
v2 = getpwnam(a1); | |
if ( v2 ) | |
return v2->pw_uid; | |
else | |
return 0xFFFFFFFFLL; | |
} | |
//----- (000000000002A82A) ---------------------------------------------------- | |
__int64 __fastcall get_uid_by_name_from_file(const char *a1, const char *a2) | |
{ | |
struct passwd *v3; // [rsp+18h] [rbp-18h] | |
FILE *stream; // [rsp+20h] [rbp-10h] | |
unsigned int pw_uid; // [rsp+2Ch] [rbp-4h] | |
pw_uid = -1; | |
stream = fopen64(a2, "r"); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
while ( 1 ) | |
{ | |
v3 = fgetpwent(stream); | |
if ( !v3 ) | |
break; | |
if ( !strcasecmp(a1, v3->pw_name) ) | |
{ | |
pw_uid = v3->pw_uid; | |
break; | |
} | |
} | |
fclose(stream); | |
return pw_uid; | |
} | |
//----- (000000000002A8BE) ---------------------------------------------------- | |
__int64 __fastcall get_gid_by_name(const char *a1) | |
{ | |
struct group *v2; // [rsp+18h] [rbp-8h] | |
v2 = getgrnam(a1); | |
if ( v2 ) | |
return v2->gr_gid; | |
else | |
return 0xFFFFFFFFLL; | |
} | |
//----- (000000000002A8F9) ---------------------------------------------------- | |
int __fastcall sub_2A8F9(int a1) | |
{ | |
struct dirent64 *result; // [rsp+18h] [rbp-138h] BYREF | |
struct dirent64 entry; // [rsp+20h] [rbp-130h] BYREF | |
int fd; // [rsp+144h] [rbp-Ch] | |
DIR *dirp; // [rsp+148h] [rbp-8h] | |
dirp = opendir("/proc/self/fd"); | |
memset(&entry, 0, sizeof(entry)); | |
result = 0LL; | |
while ( !readdir64_r(dirp, &entry, &result) && result ) | |
{ | |
fd = atoi(entry.d_name); | |
if ( fd >= a1 ) | |
close(fd); | |
} | |
return closedir(dirp); | |
} | |
//----- (000000000002A9A4) ---------------------------------------------------- | |
__int64 __fastcall sub_2A9A4(unsigned int a1, int a2, int a3, const char *a4, unsigned __int8 a5, const char **a6) | |
{ | |
FILE *v6; // rax | |
const char **v7; // rax | |
const char **v8; // rax | |
unsigned int v9; // ebx | |
int v10; // eax | |
int v11; // eax | |
int v12; // eax | |
char **gl_pathv; // rax | |
int fd; // [rsp+1Ch] [rbp-B4h] | |
glob64_t pglob; // [rsp+20h] [rbp-B0h] BYREF | |
int pipedes[2]; // [rsp+70h] [rbp-60h] BYREF | |
int stat_loc; // [rsp+84h] [rbp-4Ch] BYREF | |
FILE *stream; // [rsp+88h] [rbp-48h] BYREF | |
int v24; // [rsp+90h] [rbp-40h] | |
int v25; // [rsp+9Ch] [rbp-34h] | |
__pid_t pid; // [rsp+A0h] [rbp-30h] | |
unsigned int v27; // [rsp+A4h] [rbp-2Ch] | |
const char **v28; // [rsp+A8h] [rbp-28h] | |
const char **i; // [rsp+B0h] [rbp-20h] | |
unsigned __int8 v30; // [rsp+BFh] [rbp-11h] | |
fd = a1; | |
v27 = getpid(); | |
if ( a4 ) | |
v6 = fopen64(a4, "a+"); | |
else | |
v6 = 0LL; | |
stream = v6; | |
v30 = 0; | |
v28 = 0LL; | |
for ( i = a6; i && *i; ++i ) | |
{ | |
if ( *i == (const char *)&dword_7C ) | |
{ | |
v28 = i; | |
} | |
else if ( *i == (_BYTE *)&qword_20 + 6 ) | |
{ | |
v30 = 1; | |
*i = 0LL; | |
break; | |
} | |
} | |
if ( v28 ) | |
{ | |
v7 = v28++; | |
*v7 = (_BYTE *)(&qword_20 + 6); | |
} | |
if ( v28 ) | |
v8 = v28; | |
else | |
v8 = a6; | |
v28 = v8; | |
if ( v8 && *v28 ) | |
{ | |
pid = fork(); | |
if ( pid >= 0 ) | |
{ | |
if ( !pid ) | |
{ | |
if ( v28 > a6 ) | |
{ | |
pipedes[0] = -1; | |
pipedes[1] = -1; | |
if ( pipe(pipedes) < 0 ) | |
{ | |
if ( stream ) | |
{ | |
fprintf(stream, "[ERROR] [%d] create pipe fail: %s\n", v27, *v28); | |
fflush(stream); | |
} | |
_exit(0); | |
} | |
sub_2A9A4(a1, (unsigned int)pipedes[1], (unsigned int)a3, a4, a5, a6); | |
fd = pipedes[0]; | |
close(pipedes[1]); | |
} | |
if ( v28 > a6 && regexec(&preg, *v28, 0LL, 0LL, 0) != 1 ) | |
{ | |
if ( stream ) | |
{ | |
fprintf(stream, "[WARN] [%d] insecure exec pipeline %s\n", v27, *v28); | |
fflush(stream); | |
} | |
_exit(1); | |
} | |
v25 = open64("/dev/null", 2); | |
if ( fd < 0 ) | |
{ | |
v10 = 0; | |
if ( v25 >= 0 ) | |
v10 = v25; | |
dup2(v10, 0); | |
} | |
else | |
{ | |
dup2(fd, 0); | |
} | |
if ( a2 < 0 ) | |
{ | |
if ( v25 < 0 ) | |
v11 = 1; | |
else | |
v11 = v25; | |
dup2(v11, 1); | |
} | |
else | |
{ | |
dup2(a2, 1); | |
} | |
if ( a3 < 0 ) | |
{ | |
if ( v25 < 0 ) | |
v12 = 2; | |
else | |
v12 = v25; | |
dup2(v12, 2); | |
} | |
else | |
{ | |
dup2(a3, 2); | |
} | |
lseek64(0, 0LL, 0); | |
sub_2A8F9(3); | |
if ( v30 ) | |
setsid(); | |
memset(&pglob, 0, sizeof(pglob)); | |
pglob.gl_closedir = (void (*)(void *))&closedir; | |
pglob.gl_readdir = (struct dirent64 *(*)(void *))&readdir64; | |
pglob.gl_opendir = (void *(*)(const char *))&opendir; | |
pglob.gl_lstat = (int (*)(const char *, struct stat64 *))sub_2D9F0; | |
pglob.gl_stat = (int (*)(const char *, struct stat64 *))sub_2D9F0; | |
if ( a5 ) | |
{ | |
for ( i = v28; i && *i; ++i ) | |
glob64(*i, 3636, 0LL, &pglob); | |
} | |
if ( pglob.gl_pathv && *pglob.gl_pathv ) | |
gl_pathv = pglob.gl_pathv; | |
else | |
gl_pathv = (char **)v28; | |
execvp(*v28, gl_pathv); | |
_exit(1); | |
} | |
stat_loc = 0; | |
waitpid(pid, &stat_loc, v30); | |
v24 = stat_loc; | |
v9 = (stat_loc & 0xFF00) >> 8; | |
} | |
else | |
{ | |
v9 = -1; | |
} | |
} | |
else | |
{ | |
if ( stream ) | |
{ | |
fprintf(stream, "[WARN] [%d] cannot execvp NULL command\n", v27); | |
fflush(stream); | |
} | |
v9 = -1; | |
} | |
qnap_auto_close_file(&stream); | |
return v9; | |
} | |
// 20: using guessed type __int64; | |
// 7C: using guessed type int; | |
//----- (000000000002AE7A) ---------------------------------------------------- | |
__int64 __fastcall sub_2AE7A(unsigned int a1, int a2, int a3, const char *a4, unsigned __int8 a5, const char **a6) | |
{ | |
const char **i; // [rsp+28h] [rbp-8h] | |
for ( i = a6; i && *i; ++i ) | |
{ | |
if ( **i != 124 || (*i)[1] ) | |
{ | |
if ( **i == 38 && !(*i)[1] ) | |
*i = (_BYTE *)(&qword_20 + 6); | |
} | |
else | |
{ | |
*i = (const char *)&dword_7C; | |
} | |
} | |
return sub_2A9A4(a1, a2, a3, a4, a5, a6); | |
} | |
// 20: using guessed type __int64 qword_20; | |
// 7C: using guessed type int dword_7C; | |
//----- (000000000002AF4F) ---------------------------------------------------- | |
__int64 __fastcall sub_2AF4F( | |
const char *a1, | |
const char *a2, | |
const char *a3, | |
unsigned __int8 a4, | |
const char *a5, | |
__int64 *a6) | |
{ | |
_QWORD *v6; // rax | |
unsigned int v7; // ebx | |
_QWORD *v8; // rax | |
__int64 v14; // [rsp+30h] [rbp-60h] | |
_QWORD *v15; // [rsp+38h] [rbp-58h] | |
__int64 v16; // [rsp+40h] [rbp-50h] | |
__int64 v17; // [rsp+48h] [rbp-48h] | |
_QWORD *v18; // [rsp+50h] [rbp-40h] | |
__int64 v19; // [rsp+58h] [rbp-38h] | |
int v20; // [rsp+60h] [rbp-30h] BYREF | |
int v21; // [rsp+64h] [rbp-2Ch] BYREF | |
const char **v22; // [rsp+68h] [rbp-28h] BYREF | |
_QWORD *v23; // [rsp+70h] [rbp-20h] | |
size_t nmemb; // [rsp+78h] [rbp-18h] | |
nmemb = 2LL; | |
v17 = *a6; | |
v18 = (_QWORD *)a6[1]; | |
v19 = a6[2]; | |
while ( 1 ) | |
{ | |
if ( (unsigned int)v17 >= 0x30 ) | |
{ | |
v6 = v18++; | |
} | |
else | |
{ | |
v6 = (_QWORD *)((unsigned int)v17 + v19); | |
LODWORD(v17) = v17 + 8; | |
} | |
if ( !*v6 ) | |
break; | |
++nmemb; | |
} | |
v22 = (const char **)calloc(nmemb, 8uLL); | |
if ( v22 ) | |
{ | |
v14 = *a6; | |
v15 = (_QWORD *)a6[1]; | |
v16 = a6[2]; | |
v23 = v22 + 1; | |
*v22 = a5; | |
while ( 1 ) | |
{ | |
if ( (unsigned int)v14 >= 0x30 ) | |
{ | |
v8 = v15++; | |
} | |
else | |
{ | |
v8 = (_QWORD *)((unsigned int)v14 + v16); | |
LODWORD(v14) = v14 + 8; | |
} | |
*v23 = *v8; | |
if ( !*v23 ) | |
break; | |
++v23; | |
} | |
v21 = open64(a1, 1090, 508LL); | |
v20 = open64(a2, 1090, 508LL); | |
v7 = sub_2AE7A(0xFFFFFFFF, v21, v20, a3, a4, v22); | |
qnap_auto_close_fd(&v20); | |
qnap_auto_close_fd(&v21); | |
} | |
else | |
{ | |
v7 = -1; | |
} | |
sub_2A21C((void **)&v22); | |
return v7; | |
} | |
//----- (000000000002B11E) ---------------------------------------------------- | |
__int64 qnap_exec(const char *a1, const char *a2, const char *a3, const char *a4, ...) | |
{ | |
gcc_va_list va; // [rsp+20h] [rbp-D0h] BYREF | |
va_start(va, a4); | |
return (unsigned int)sub_2AF4F(a1, a2, a3, 0, a4, (__int64 *)va); | |
} | |
//----- (000000000002B1E8) ---------------------------------------------------- | |
__int64 qnap_exec_glob(const char *a1, const char *a2, const char *a3, const char *a4, ...) | |
{ | |
gcc_va_list va; // [rsp+20h] [rbp-D0h] BYREF | |
va_start(va, a4); | |
return (unsigned int)sub_2AF4F(a1, a2, a3, 1u, a4, (__int64 *)va); | |
} | |
//----- (000000000002B2B2) ---------------------------------------------------- | |
__int64 __fastcall qnap_exec_v(const char *a1, const char *a2, const char *a3, const char *a4, _QWORD *a5) | |
{ | |
unsigned int v5; // ebx | |
const char **v6; // rax | |
const char **v7; // rdx | |
const char **v10; // [rsp+8h] [rbp-68h] | |
int v13; // [rsp+38h] [rbp-38h] BYREF | |
int v14; // [rsp+3Ch] [rbp-34h] BYREF | |
const char **v15; // [rsp+40h] [rbp-30h] BYREF | |
const char **v16; // [rsp+48h] [rbp-28h] | |
_QWORD *i; // [rsp+50h] [rbp-20h] | |
size_t nmemb; // [rsp+58h] [rbp-18h] | |
nmemb = 2LL; | |
for ( i = a5; *i; ++i ) | |
++nmemb; | |
v15 = (const char **)calloc(nmemb, 8uLL); | |
if ( v15 ) | |
{ | |
v16 = v15 + 1; | |
*v15 = a4; | |
v10 = (const char **)(a5 + 1); | |
do | |
{ | |
v6 = v16++; | |
v7 = v10++; | |
*v6 = *v7; | |
} | |
while ( *v6 ); | |
v14 = open64(a1, 1090, 508LL); | |
v13 = open64(a2, 1090, 508LL); | |
v5 = sub_2AE7A(0xFFFFFFFF, v14, v13, a3, 0, v15); | |
qnap_auto_close_fd(&v13); | |
qnap_auto_close_fd(&v14); | |
} | |
else | |
{ | |
v5 = -1; | |
} | |
sub_2A21C((void **)&v15); | |
return v5; | |
} | |
//----- (000000000002B3FC) ---------------------------------------------------- | |
__int64 __fastcall qnap_exec_v2( | |
const char *a1, | |
const char *a2, | |
const char *a3, | |
const char *a4, | |
int a5, | |
int a6, | |
const char *a7, | |
_QWORD *a8) | |
{ | |
unsigned int v8; // ebx | |
const char **v9; // rax | |
const char **v10; // rdx | |
int v16; // [rsp+34h] [rbp-3Ch] BYREF | |
int v17; // [rsp+38h] [rbp-38h] BYREF | |
int v18; // [rsp+3Ch] [rbp-34h] BYREF | |
const char **v19; // [rsp+40h] [rbp-30h] BYREF | |
const char **v20; // [rsp+48h] [rbp-28h] | |
_QWORD *i; // [rsp+50h] [rbp-20h] | |
size_t nmemb; // [rsp+58h] [rbp-18h] | |
const char **v23; // [rsp+88h] [rbp+18h] | |
nmemb = 2LL; | |
for ( i = a8; *i; ++i ) | |
++nmemb; | |
v19 = (const char **)calloc(nmemb, 8uLL); | |
if ( v19 ) | |
{ | |
v20 = v19 + 1; | |
*v19 = a7; | |
v23 = (const char **)(a8 + 1); | |
do | |
{ | |
v9 = v20++; | |
v10 = v23++; | |
*v9 = *v10; | |
} | |
while ( *v9 ); | |
v18 = open64(a1, 0); | |
v17 = open64(a2, a5, 508LL); | |
v16 = open64(a3, a6, 508LL); | |
v8 = sub_2AE7A(v18, v17, v16, a4, 0, v19); | |
qnap_auto_close_fd(&v16); | |
qnap_auto_close_fd(&v17); | |
qnap_auto_close_fd(&v18); | |
} | |
else | |
{ | |
v8 = -1; | |
} | |
sub_2A21C((void **)&v19); | |
return v8; | |
} | |
//----- (000000000002B56D) ---------------------------------------------------- | |
__int64 qnap_exec_pipe(const char *a1, const char *a2, const char *a3, ...) | |
{ | |
__int64 *v3; // rax | |
__int64 v4; // kr00_8 | |
unsigned int v5; // ebx | |
__int64 *v6; // rax | |
__int64 v7; // kr08_8 | |
gcc_va_list va1; // [rsp+20h] [rbp-110h] BYREF | |
gcc_va_list va; // [rsp+38h] [rbp-F8h] BYREF | |
int v12; // [rsp+50h] [rbp-E0h] BYREF | |
int v13; // [rsp+54h] [rbp-DCh] BYREF | |
const char **v14; // [rsp+58h] [rbp-D8h] BYREF | |
__int64 *v15; // [rsp+60h] [rbp-D0h] | |
size_t nmemb; // [rsp+68h] [rbp-C8h] | |
va_start(va, a3); | |
for ( nmemb = 2LL; ; ++nmemb ) | |
{ | |
if ( va[0].gp_offset >= 0x30 ) | |
{ | |
v4 = va_arg(va, _QWORD); | |
v3 = &v4; | |
} | |
else | |
{ | |
v3 = (__int64 *)((char *)va[0].reg_save_area + va[0].gp_offset); | |
va[0].gp_offset += 8; | |
} | |
if ( !*v3 ) | |
break; | |
} | |
v14 = (const char **)calloc(nmemb, 8uLL); | |
if ( v14 ) | |
{ | |
va_start(va1, a3); | |
v15 = (__int64 *)(v14 + 1); | |
*v14 = a3; | |
while ( 1 ) | |
{ | |
if ( va1[0].gp_offset >= 0x30 ) | |
{ | |
v7 = va_arg(va1, _QWORD); | |
v6 = &v7; | |
} | |
else | |
{ | |
v6 = (__int64 *)((char *)va[0].reg_save_area + va1[0].gp_offset); | |
va1[0].gp_offset += 8; | |
} | |
*v15 = *v6; | |
if ( !*v15 ) | |
break; | |
++v15; | |
} | |
v13 = open64(a1, 1090, 508LL); | |
v12 = open64(a2, 1090, 508LL); | |
v5 = sub_2AE7A(0xFFFFFFFF, v13, v12, 0LL, 0, v14); | |
qnap_auto_close_fd(&v12); | |
qnap_auto_close_fd(&v13); | |
} | |
else | |
{ | |
v5 = -1; | |
} | |
sub_2A21C((void **)&v14); | |
return v5; | |
} | |
//----- (000000000002B7F2) ---------------------------------------------------- | |
__int64 __fastcall sub_2B7F2(unsigned __int8 a1, const char *a2, __int64 *a3) | |
{ | |
_QWORD *v3; // rax | |
unsigned int v4; // ebx | |
_QWORD *v5; // rax | |
__int64 v8; // [rsp+28h] [rbp-58h] | |
_QWORD *v9; // [rsp+30h] [rbp-50h] | |
__int64 v10; // [rsp+38h] [rbp-48h] | |
__int64 v11; // [rsp+40h] [rbp-40h] | |
_QWORD *v12; // [rsp+48h] [rbp-38h] | |
__int64 v13; // [rsp+50h] [rbp-30h] | |
const char **v14; // [rsp+58h] [rbp-28h] BYREF | |
_QWORD *v15; // [rsp+60h] [rbp-20h] | |
size_t nmemb; // [rsp+68h] [rbp-18h] | |
nmemb = 2LL; | |
v11 = *a3; | |
v12 = (_QWORD *)a3[1]; | |
v13 = a3[2]; | |
while ( 1 ) | |
{ | |
if ( (unsigned int)v11 >= 0x30 ) | |
{ | |
v3 = v12++; | |
} | |
else | |
{ | |
v3 = (_QWORD *)((unsigned int)v11 + v13); | |
LODWORD(v11) = v11 + 8; | |
} | |
if ( !*v3 ) | |
break; | |
++nmemb; | |
} | |
v14 = (const char **)calloc(nmemb, 8uLL); | |
if ( v14 ) | |
{ | |
v8 = *a3; | |
v9 = (_QWORD *)a3[1]; | |
v10 = a3[2]; | |
v15 = v14 + 1; | |
*v14 = a2; | |
while ( 1 ) | |
{ | |
if ( (unsigned int)v8 >= 0x30 ) | |
{ | |
v5 = v9++; | |
} | |
else | |
{ | |
v5 = (_QWORD *)((unsigned int)v8 + v10); | |
LODWORD(v8) = v8 + 8; | |
} | |
*v15 = *v5; | |
if ( !*v15 ) | |
break; | |
++v15; | |
} | |
v4 = sub_2AE7A(0xFFFFFFFF, -1, -1, 0LL, a1, v14); | |
} | |
else | |
{ | |
v4 = -1; | |
} | |
sub_2A21C((void **)&v14); | |
return v4; | |
} | |
//----- (000000000002B94F) ---------------------------------------------------- | |
__int64 qnap_system(const char *a1, ...) | |
{ | |
gcc_va_list va; // [rsp+10h] [rbp-D0h] BYREF | |
va_start(va, a1); | |
return (unsigned int)sub_2B7F2(0, a1, (__int64 *)va); | |
} | |
//----- (000000000002B9FE) ---------------------------------------------------- | |
__int64 qnap_system_glob(const char *a1, ...) | |
{ | |
gcc_va_list va; // [rsp+10h] [rbp-D0h] BYREF | |
va_start(va, a1); | |
return (unsigned int)sub_2B7F2(1u, a1, (__int64 *)va); | |
} | |
//----- (000000000002BAAD) ---------------------------------------------------- | |
FILE *__fastcall sub_2BAAD(char *a1, const char *a2, const char *a3, unsigned __int8 a4, char a5, const char **a6) | |
{ | |
FILE *v6; // rax | |
char *v7; // rax | |
FILE *v8; // rbx | |
int v9; // eax | |
void (__fastcall *v10)(unsigned int, int, int, const char *, unsigned __int8, const char **); // rax | |
int v11; // esi | |
int v12; // edi | |
char *s; // [rsp+28h] [rbp-58h] | |
int v19; // [rsp+3Ch] [rbp-44h] | |
int fds[2]; // [rsp+40h] [rbp-40h] BYREF | |
FILE *stream; // [rsp+48h] [rbp-38h] BYREF | |
__pid_t v22; // [rsp+50h] [rbp-30h] | |
unsigned int v23; // [rsp+54h] [rbp-2Ch] | |
FILE *v24; // [rsp+58h] [rbp-28h] | |
void *ptr; // [rsp+60h] [rbp-20h] | |
_BOOL4 v26; // [rsp+6Ch] [rbp-14h] | |
s = a1; | |
v23 = getpid(); | |
if ( a3 ) | |
v6 = fopen64(a3, "a+"); | |
else | |
v6 = 0LL; | |
stream = v6; | |
fds[0] = -1; | |
fds[1] = -1; | |
v7 = strchr(a1, 43); | |
v26 = v7 != 0LL; | |
if ( v7 ) | |
{ | |
s = "r+"; | |
if ( socketpair(1, 1, 0, fds) < 0 ) | |
{ | |
if ( stream ) | |
{ | |
fprintf(stream, "[ERROR] [%d] create socketpair fail: %s\n", v23, *a6); | |
fflush(stream); | |
} | |
v8 = 0LL; | |
goto LABEL_44; | |
} | |
goto LABEL_16; | |
} | |
if ( (*a1 == 114 || *a1 == 119) && !a1[1] && pipe(fds) >= 0 ) | |
{ | |
LABEL_16: | |
ptr = calloc(1uLL, 0x18uLL); | |
if ( ptr ) | |
{ | |
pthread_rwlock_rdlock(&rwlock); | |
v22 = vfork(); | |
if ( v22 >= 0 ) | |
{ | |
if ( !v22 ) | |
{ | |
if ( a2 ) | |
v9 = open64(a2, 1090, 508LL); | |
else | |
v9 = -1; | |
v19 = v9; | |
if ( a5 ) | |
v10 = (void (__fastcall *)(unsigned int, int, int, const char *, unsigned __int8, const char **))sub_2A9A4; | |
else | |
v10 = (void (__fastcall *)(unsigned int, int, int, const char *, unsigned __int8, const char **))sub_2AE7A; | |
if ( *s == 114 || v26 ) | |
v11 = fds[1]; | |
else | |
v11 = -1; | |
if ( *s == 119 || v26 ) | |
v12 = fds[0]; | |
else | |
v12 = -1; | |
v10(v12, v11, v19, 0LL, a4, a6); | |
_exit(1); | |
} | |
v24 = 0LL; | |
if ( *s == 114 ) | |
{ | |
v24 = fdopen(fds[0], s); | |
close(fds[1]); | |
} | |
else | |
{ | |
v24 = fdopen(fds[1], s); | |
close(fds[0]); | |
} | |
*((_QWORD *)ptr + 1) = v24; | |
*((_DWORD *)ptr + 4) = v22; | |
*(_QWORD *)ptr = qword_237A00; | |
qword_237A00 = (__int64)ptr; | |
pthread_rwlock_unlock(&rwlock); | |
v8 = v24; | |
} | |
else | |
{ | |
if ( stream ) | |
{ | |
fprintf(stream, "[ERROR] [%d] vfork fail: %s\n", v23, *a6); | |
fflush(stream); | |
} | |
pthread_rwlock_unlock(&rwlock); | |
close(fds[0]); | |
close(fds[1]); | |
free(ptr); | |
v8 = 0LL; | |
} | |
} | |
else | |
{ | |
if ( stream ) | |
{ | |
fprintf(stream, "[ERROR] [%d] calloc fail: %s\n", v23, *a6); | |
fflush(stream); | |
} | |
close(fds[0]); | |
close(fds[1]); | |
v8 = 0LL; | |
} | |
goto LABEL_44; | |
} | |
if ( stream ) | |
{ | |
fprintf(stream, "[ERROR] [%d] create pipe fail: %s\n", v23, *a6); | |
fflush(stream); | |
} | |
v8 = 0LL; | |
LABEL_44: | |
qnap_auto_close_file(&stream); | |
return v8; | |
} | |
// 237A00: using guessed type __int64 qword_237A00; | |
//----- (000000000002BE5E) ---------------------------------------------------- | |
FILE *__fastcall sub_2BE5E(char *a1, unsigned __int8 a2, const char *a3, __int64 *a4) | |
{ | |
_QWORD *v4; // rax | |
FILE *v5; // rbx | |
_QWORD *v6; // rax | |
_QWORD *v7; // rax | |
__int64 v11; // [rsp+28h] [rbp-58h] | |
_QWORD *v12; // [rsp+30h] [rbp-50h] | |
__int64 v13; // [rsp+38h] [rbp-48h] | |
__int64 v14; // [rsp+40h] [rbp-40h] | |
_QWORD *v15; // [rsp+48h] [rbp-38h] | |
__int64 v16; // [rsp+50h] [rbp-30h] | |
const char **v17; // [rsp+58h] [rbp-28h] BYREF | |
_QWORD *v18; // [rsp+60h] [rbp-20h] | |
size_t nmemb; // [rsp+68h] [rbp-18h] | |
nmemb = 3LL; | |
v14 = *a4; | |
v15 = (_QWORD *)a4[1]; | |
v16 = a4[2]; | |
while ( 1 ) | |
{ | |
if ( (unsigned int)v14 >= 0x30 ) | |
{ | |
v4 = v15++; | |
} | |
else | |
{ | |
v4 = (_QWORD *)((unsigned int)v14 + v16); | |
LODWORD(v14) = v14 + 8; | |
} | |
if ( !*v4 ) | |
break; | |
++nmemb; | |
} | |
v17 = (const char **)calloc(nmemb, 8uLL); | |
if ( v17 ) | |
{ | |
v11 = *a4; | |
v12 = (_QWORD *)a4[1]; | |
v13 = a4[2]; | |
v18 = v17 + 1; | |
*v17 = a3; | |
while ( 1 ) | |
{ | |
if ( (unsigned int)v11 >= 0x30 ) | |
{ | |
v6 = v12++; | |
} | |
else | |
{ | |
v6 = (_QWORD *)((unsigned int)v11 + v13); | |
LODWORD(v11) = v11 + 8; | |
} | |
*v18 = *v6; | |
if ( !*v18 ) | |
break; | |
++v18; | |
} | |
v7 = v18++; | |
*v7 = "&"; | |
v5 = sub_2BAAD(a1, 0LL, 0LL, a2, 0, v17); | |
} | |
else | |
{ | |
v5 = 0LL; | |
} | |
sub_2A21C((void **)&v17); | |
return v5; | |
} | |
//----- (000000000002BFD9) ---------------------------------------------------- | |
FILE *qnap_popen(char *a1, const char *a2, ...) | |
{ | |
gcc_va_list va; // [rsp+10h] [rbp-D0h] BYREF | |
va_start(va, a2); | |
return sub_2BE5E(a1, 0, a2, (__int64 *)va); | |
} | |
//----- (000000000002C091) ---------------------------------------------------- | |
FILE *qnap_popen_glob(char *a1, const char *a2, ...) | |
{ | |
gcc_va_list va; // [rsp+10h] [rbp-D0h] BYREF | |
va_start(va, a2); | |
return sub_2BE5E(a1, 1u, a2, (__int64 *)va); | |
} | |
//----- (000000000002C149) ---------------------------------------------------- | |
FILE *__fastcall sub_2C149(char *a1, const char *a2, const char *a3, unsigned __int8 a4, const char *a5, __int64 *a6) | |
{ | |
_QWORD *v6; // rax | |
FILE *v7; // rbx | |
_QWORD *v8; // rax | |
_QWORD *v9; // rax | |
__int64 v15; // [rsp+38h] [rbp-58h] | |
_QWORD *v16; // [rsp+40h] [rbp-50h] | |
__int64 v17; // [rsp+48h] [rbp-48h] | |
__int64 v18; // [rsp+50h] [rbp-40h] | |
_QWORD *v19; // [rsp+58h] [rbp-38h] | |
__int64 v20; // [rsp+60h] [rbp-30h] | |
const char **v21; // [rsp+68h] [rbp-28h] BYREF | |
_QWORD *v22; // [rsp+70h] [rbp-20h] | |
size_t nmemb; // [rsp+78h] [rbp-18h] | |
nmemb = 3LL; | |
v18 = *a6; | |
v19 = (_QWORD *)a6[1]; | |
v20 = a6[2]; | |
while ( 1 ) | |
{ | |
if ( (unsigned int)v18 >= 0x30 ) | |
{ | |
v6 = v19++; | |
} | |
else | |
{ | |
v6 = (_QWORD *)((unsigned int)v18 + v20); | |
LODWORD(v18) = v18 + 8; | |
} | |
if ( !*v6 ) | |
break; | |
++nmemb; | |
} | |
v21 = (const char **)calloc(nmemb, 8uLL); | |
if ( v21 ) | |
{ | |
v15 = *a6; | |
v16 = (_QWORD *)a6[1]; | |
v17 = a6[2]; | |
v22 = v21 + 1; | |
*v21 = a5; | |
while ( 1 ) | |
{ | |
if ( (unsigned int)v15 >= 0x30 ) | |
{ | |
v8 = v16++; | |
} | |
else | |
{ | |
v8 = (_QWORD *)((unsigned int)v15 + v17); | |
LODWORD(v15) = v15 + 8; | |
} | |
*v22 = *v8; | |
if ( !*v22 ) | |
break; | |
++v22; | |
} | |
v9 = v22++; | |
*v9 = "&"; | |
v7 = sub_2BAAD(a1, a2, a3, a4, 0, v21); | |
} | |
else | |
{ | |
v7 = 0LL; | |
} | |
sub_2A21C((void **)&v21); | |
return v7; | |
} | |
//----- (000000000002C2DD) ---------------------------------------------------- | |
FILE *qnap_popen_log(char *a1, const char *a2, const char *a3, const char *a4, ...) | |
{ | |
gcc_va_list va; // [rsp+20h] [rbp-D0h] BYREF | |
va_start(va, a4); | |
return sub_2C149(a1, a2, a3, 0, a4, (__int64 *)va); | |
} | |
//----- (000000000002C3A9) ---------------------------------------------------- | |
FILE *qnap_popen_glob_log(char *a1, const char *a2, const char *a3, const char *a4, ...) | |
{ | |
gcc_va_list va; // [rsp+20h] [rbp-D0h] BYREF | |
va_start(va, a4); | |
return sub_2C149(a1, a2, a3, 1u, a4, (__int64 *)va); | |
} | |
//----- (000000000002C475) ---------------------------------------------------- | |
FILE *qnap_popen_pipe(const char *a1, ...) | |
{ | |
__int64 *v1; // rax | |
__int64 v2; // kr00_8 | |
FILE *v3; // rbx | |
__int64 *v4; // rax | |
__int64 v5; // kr08_8 | |
__int64 *v6; // rax | |
gcc_va_list va1; // [rsp+18h] [rbp-108h] BYREF | |
gcc_va_list va; // [rsp+30h] [rbp-F0h] BYREF | |
const char **v10; // [rsp+48h] [rbp-D8h] BYREF | |
__int64 *v11; // [rsp+50h] [rbp-D0h] | |
size_t nmemb; // [rsp+58h] [rbp-C8h] | |
va_start(va, a1); | |
for ( nmemb = 3LL; ; ++nmemb ) | |
{ | |
if ( va[0].gp_offset >= 0x30 ) | |
{ | |
v2 = va_arg(va, _QWORD); | |
v1 = &v2; | |
} | |
else | |
{ | |
v1 = (__int64 *)((char *)va[0].reg_save_area + va[0].gp_offset); | |
va[0].gp_offset += 8; | |
} | |
if ( !*v1 ) | |
break; | |
} | |
v10 = (const char **)calloc(nmemb, 8uLL); | |
if ( v10 ) | |
{ | |
va_start(va1, a1); | |
v11 = (__int64 *)(v10 + 1); | |
*v10 = a1; | |
while ( 1 ) | |
{ | |
if ( va1[0].gp_offset >= 0x30 ) | |
{ | |
v5 = va_arg(va1, _QWORD); | |
v4 = &v5; | |
} | |
else | |
{ | |
v4 = (__int64 *)((char *)va[0].reg_save_area + va1[0].gp_offset); | |
va1[0].gp_offset += 8; | |
} | |
*v11 = *v4; | |
if ( !*v11 ) | |
break; | |
++v11; | |
} | |
v6 = v11++; | |
*v6 = (__int64)"&"; | |
v3 = sub_2BAAD("r", 0LL, 0LL, 0, 0, v10); | |
} | |
else | |
{ | |
v3 = 0LL; | |
} | |
sub_2A21C((void **)&v10); | |
return v3; | |
} | |
//----- (000000000002C6B0) ---------------------------------------------------- | |
__int64 __fastcall qnap_pclose(FILE *a1) | |
{ | |
int stat_loc; // [rsp+18h] [rbp-18h] BYREF | |
__pid_t v3; // [rsp+1Ch] [rbp-14h] | |
_QWORD *v4; // [rsp+20h] [rbp-10h] | |
void *ptr; // [rsp+28h] [rbp-8h] | |
if ( !a1 ) | |
return 0xFFFFFFFFLL; | |
pthread_rwlock_wrlock(&rwlock); | |
v4 = 0LL; | |
for ( ptr = (void *)qword_237A00; ptr && *((FILE **)ptr + 1) != a1; ptr = *(void **)ptr ) | |
v4 = ptr; | |
if ( ptr ) | |
{ | |
fclose(a1); | |
if ( v4 ) | |
*v4 = *(_QWORD *)ptr; | |
else | |
qword_237A00 = *(_QWORD *)ptr; | |
pthread_rwlock_unlock(&rwlock); | |
do | |
v3 = waitpid(*((_DWORD *)ptr + 4), &stat_loc, 0); | |
while ( v3 == -1 && *__errno_location() == 4 ); | |
free(ptr); | |
if ( v3 == -1 ) | |
return 0xFFFFFFFFLL; | |
else | |
return (unsigned int)stat_loc; | |
} | |
else | |
{ | |
pthread_rwlock_unlock(&rwlock); | |
return 0xFFFFFFFFLL; | |
} | |
} | |
// 237A00: using guessed type __int64 qword_237A00; | |
//----- (000000000002C7C0) ---------------------------------------------------- | |
__int64 __fastcall qnap_pclose_pipe(__int64 a1) | |
{ | |
return qnap_pclose(a1); | |
} | |
// A180: using guessed type __int64 __fastcall qnap_pclose(_QWORD); | |
//----- (000000000002C7DA) ---------------------------------------------------- | |
__int64 __fastcall qnap_secure_exec( | |
int a1, | |
int a2, | |
int a3, | |
int a4, | |
int a5, | |
int a6, | |
const char **a7, | |
char a8, | |
char *file, | |
char *a10, | |
int oflag, | |
char *a12, | |
int a13, | |
const char *a14) | |
{ | |
unsigned int v14; // ebx | |
int v16; // [rsp+4h] [rbp-1Ch] BYREF | |
int v17; // [rsp+8h] [rbp-18h] BYREF | |
int v18[5]; // [rsp+Ch] [rbp-14h] BYREF | |
v18[0] = -1; | |
if ( file ) | |
v18[0] = open64(file, 0); | |
v17 = -1; | |
if ( a10 ) | |
v17 = open64(a10, oflag, 508LL); | |
v16 = -1; | |
if ( a12 ) | |
v16 = open64(a12, a13, 508LL); | |
v14 = sub_2A9A4(v18[0], v17, v16, a14, a8 != 0, a7); | |
qnap_auto_close_fd(&v16); | |
qnap_auto_close_fd(&v17); | |
qnap_auto_close_fd(v18); | |
return v14; | |
} | |
// 2C7DA: using guessed type int var_14[5]; | |
//----- (000000000002C8C1) ---------------------------------------------------- | |
FILE *__fastcall qnap_secure_popen( | |
char *a1, | |
__int64 a2, | |
__int64 a3, | |
__int64 a4, | |
__int64 a5, | |
__int64 a6, | |
char *a7, | |
char a8, | |
int a9, | |
int a10, | |
int a11, | |
const char *a12, | |
int a13, | |
const char *a14) | |
{ | |
FILE *v14; // rbx | |
const char **v16; // [rsp+18h] [rbp-28h] BYREF | |
char *i; // [rsp+20h] [rbp-20h] | |
size_t nmemb; // [rsp+28h] [rbp-18h] | |
nmemb = 2LL; | |
for ( i = a7; i && *(_QWORD *)i; i += 8 ) | |
++nmemb; | |
v16 = (const char **)calloc(nmemb, 8uLL); | |
if ( v16 ) | |
{ | |
for ( i = a7; i && *(_QWORD *)i; i += 8 ) | |
*(const char **)((char *)v16 + i - a7) = *(const char **)i; | |
*(const char **)((char *)v16 + i - a7) = (_BYTE *)(&qword_20 + 6); | |
v14 = sub_2BAAD(a1, a12, a14, a8 != 0, 1, v16); | |
} | |
else | |
{ | |
v14 = 0LL; | |
} | |
sub_2A21C((void **)&v16); | |
return v14; | |
} | |
// 20: using guessed type __int64 qword_20; | |
//----- (000000000002C9CF) ---------------------------------------------------- | |
__int64 __fastcall sub_2C9CF(char a1) | |
{ | |
int i; // [rsp+10h] [rbp-4h] | |
if ( a1 > 32 && a1 <= 46 || a1 > 58 && a1 <= 64 || a1 > 90 && a1 <= 96 || a1 > 122 && a1 != 127 ) | |
{ | |
for ( i = 0; i < 22; ++i ) | |
{ | |
if ( *((_BYTE *)&unk_2371C0 + 8 * i + 4) == a1 ) | |
return *((unsigned int *)&unk_2371C0 + 2 * i); | |
} | |
} | |
return 0LL; | |
} | |
//----- (000000000002CA69) ---------------------------------------------------- | |
__int64 __fastcall sub_2CA69(char *a1, char *a2) | |
{ | |
int v5; // [rsp+18h] [rbp-8h] | |
int v6; // [rsp+1Ch] [rbp-4h] | |
while ( *a1 && *a2 ) | |
{ | |
v6 = sub_2C9CF(*a1); | |
v5 = sub_2C9CF(*a2); | |
if ( v6 <= 0 || v5 <= 0 ) | |
{ | |
if ( v6 > 0 && !v5 ) | |
return 0xFFFFFFFFLL; | |
if ( !v6 && v5 > 0 ) | |
return 1LL; | |
if ( *a1 == *a2 ) | |
{ | |
++a1; | |
++a2; | |
} | |
else if ( *a1 == 45 ) | |
{ | |
++a1; | |
} | |
else | |
{ | |
if ( *a2 != 45 ) | |
break; | |
++a2; | |
} | |
} | |
else | |
{ | |
if ( v6 != v5 ) | |
{ | |
if ( v6 - v5 >= 0 ) | |
return 1LL; | |
else | |
return 0xFFFFFFFFLL; | |
} | |
++a1; | |
++a2; | |
} | |
} | |
if ( *a1 && *a2 ) | |
return 0LL; | |
if ( *a1 - *a2 >= 0 ) | |
return 1LL; | |
return 0xFFFFFFFFLL; | |
} | |
//----- (000000000002CBC3) ---------------------------------------------------- | |
char *__fastcall sub_2CBC3(const char *a1, char *a2, int a3) | |
{ | |
char *result; // rax | |
snprintf(a2, a3, "%s/%s", "/etc/config/.qos_config/users", a1); | |
result = strchr(a2, 92); | |
if ( result ) | |
*result = 43; | |
return result; | |
} | |
//----- (000000000002CC2F) ---------------------------------------------------- | |
__int64 __fastcall sub_2CC2F(char *a1, char *a2) | |
{ | |
char *endptr; // [rsp+0h] [rbp-30h] BYREF | |
char *nptr; // [rsp+8h] [rbp-28h] BYREF | |
__int64 v5; // [rsp+10h] [rbp-20h] | |
__int64 v6; // [rsp+18h] [rbp-18h] | |
char v7; // [rsp+26h] [rbp-Ah] | |
char v8; // [rsp+27h] [rbp-9h] | |
int v9; // [rsp+28h] [rbp-8h] | |
char v10; // [rsp+2Dh] [rbp-3h] | |
char v11; // [rsp+2Eh] [rbp-2h] | |
char v12; // [rsp+2Fh] [rbp-1h] | |
nptr = a1; | |
endptr = a2; | |
v12 = 0; | |
v11 = 0; | |
v10 = 0; | |
v9 = 0; | |
v8 = 0; | |
v7 = 0; | |
if ( !a1 && !endptr ) | |
return 0LL; | |
if ( !nptr ) | |
return 0xFFFFFFFFLL; | |
if ( !endptr ) | |
return 1LL; | |
while ( 1 ) | |
{ | |
while ( 1 ) | |
{ | |
do | |
{ | |
if ( !*nptr || !*endptr ) | |
{ | |
if ( *nptr ) | |
return 1LL; | |
if ( *endptr ) | |
return 0xFFFFFFFFLL; | |
return (unsigned int)v10; | |
} | |
v6 = 0LL; | |
v5 = 0LL; | |
v12 = *nptr; | |
v11 = *endptr; | |
if ( v12 <= 47 || v12 > 57 ) | |
{ | |
v8 = v12 > 96 && v12 <= 122 || v12 > 64 && v12 <= 90; | |
} | |
else | |
{ | |
v8 = 2; | |
v6 = strtol(nptr, &nptr, 10); | |
} | |
if ( v11 <= 47 || v11 > 57 ) | |
{ | |
v7 = v11 > 96 && v11 <= 122 || v11 > 64 && v11 <= 90; | |
} | |
else | |
{ | |
v7 = 2; | |
v5 = strtol(endptr, &endptr, 10); | |
} | |
++nptr; | |
++endptr; | |
} | |
while ( v12 == v11 ); | |
if ( v8 != 2 || v7 != 2 ) | |
break; | |
if ( v6 != v5 ) | |
{ | |
if ( v6 >= v5 ) | |
return 1LL; | |
else | |
return 0xFFFFFFFFLL; | |
} | |
} | |
if ( v8 == 2 ) | |
return 0xFFFFFFFFLL; | |
if ( v7 == 2 ) | |
return 1LL; | |
if ( v8 != 1 && v7 != 1 ) | |
{ | |
if ( v12 - v11 <= 0 ) | |
return 0xFFFFFFFFLL; | |
else | |
return 1LL; | |
} | |
if ( v8 != 1 ) | |
return 1LL; | |
if ( v7 != 1 ) | |
return 0xFFFFFFFFLL; | |
if ( v12 > 90 || v11 <= 96 ) | |
{ | |
if ( v12 > 96 && v11 <= 90 ) | |
{ | |
v12 -= 32; | |
v9 = 1; | |
} | |
} | |
else | |
{ | |
v11 -= 32; | |
v9 = -1; | |
} | |
if ( v12 != v11 ) | |
break; | |
if ( !v10 ) | |
v10 = v9; | |
} | |
if ( v12 - v11 <= 0 ) | |
return 0xFFFFFFFFLL; | |
else | |
return 1LL; | |
} | |
//----- (000000000002CEE9) ---------------------------------------------------- | |
__int64 __fastcall sub_2CEE9(__int64 a1, char *a2, char *a3) | |
{ | |
__int64 (__fastcall *v4)(_QWORD, char *, _QWORD, char *, _QWORD, int *); // rbx | |
unsigned int v5; // r12d | |
unsigned int v6; // eax | |
int v8; // [rsp+28h] [rbp-18h] BYREF | |
unsigned int v9; // [rsp+2Ch] [rbp-14h] | |
v9 = sub_2CA69(a2, a3); | |
if ( v9 ) | |
return v9; | |
if ( !a1 ) | |
return sub_2CC2F(a2, a3); | |
v8 = 0; | |
v4 = *(__int64 (__fastcall **)(_QWORD, char *, _QWORD, char *, _QWORD, int *))(a1 + 40); | |
v5 = strlen(a3); | |
v6 = strlen(a2); | |
return v4(*(_QWORD *)(a1 + 64), a2, v6, a3, v5, &v8); | |
} | |
//----- (000000000002CF9D) ---------------------------------------------------- | |
__int64 __fastcall sub_2CF9D(__uid_t a1, char *a2, int a3) | |
{ | |
char s[512]; // [rsp+10h] [rbp-330h] BYREF | |
__int16 v6; // [rsp+210h] [rbp-130h] | |
char v7[264]; // [rsp+220h] [rbp-120h] BYREF | |
FILE *stream; // [rsp+328h] [rbp-18h] | |
struct passwd *v9; // [rsp+330h] [rbp-10h] | |
int v10; // [rsp+33Ch] [rbp-4h] | |
memset(v7, 0, 257); | |
memset(s, 0, sizeof(s)); | |
v6 = 0; | |
v9 = getpwuid(a1); | |
stream = 0LL; | |
v10 = -1; | |
if ( !v9 ) | |
return 0xFFFFFFFFLL; | |
sub_2CBC3(v9->pw_name, v7, 257); | |
snprintf(s, 0x202uLL, "%s/config", v7); | |
stream = qnap_popen("r", "/sbin/getcfg", "common", "lang", "-d", "ENG", "-f", s, 0LL); | |
if ( !stream ) | |
return 0xFFFFFFFFLL; | |
if ( fgets(a2, a3, stream) ) | |
v10 = strlen(a2); | |
qnap_pclose(stream); | |
if ( v10 <= 0 ) | |
return 0xFFFFFFFFLL; | |
a2[v10 - 1] = 0; | |
return 0LL; | |
} | |
// A180: using guessed type __int64 __fastcall qnap_pclose(_QWORD); | |
//----- (000000000002D13D) ---------------------------------------------------- | |
void __fastcall sub_2D13D(__int64 a1) | |
{ | |
if ( *(_QWORD *)(a1 + 16) ) | |
{ | |
if ( *(_QWORD *)(a1 + 64) && *(_QWORD *)(a1 + 56) ) | |
(*(void (__fastcall **)(_QWORD))(a1 + 56))(*(_QWORD *)(a1 + 64)); | |
dlclose(*(void **)(a1 + 16)); | |
} | |
if ( *(_QWORD *)(a1 + 8) ) | |
dlclose(*(void **)(a1 + 8)); | |
if ( *(_QWORD *)a1 ) | |
dlclose(*(void **)a1); | |
free((void *)a1); | |
} | |
//----- (000000000002D1DB) ---------------------------------------------------- | |
__int64 __fastcall sub_2D1DB(const char *a1, char *a2, int a3) | |
{ | |
char *v5; // [rsp+28h] [rbp-18h] | |
char *v6; // [rsp+28h] [rbp-18h] | |
const char *s; // [rsp+30h] [rbp-10h] | |
const char *haystack; // [rsp+38h] [rbp-8h] | |
haystack = getenv("HTTP_COOKIE"); | |
if ( !haystack ) | |
return 0xFFFFFFFFLL; | |
s = strstr(haystack, a1); | |
if ( !s ) | |
return 0xFFFFFFFFLL; | |
v5 = strchr(s, 61); | |
if ( !v5 ) | |
return 0xFFFFFFFFLL; | |
snprintf(a2, a3, "%s", v5 + 1); | |
v6 = strchr(a2, 59); | |
if ( v6 ) | |
*v6 = 0; | |
return 0LL; | |
} | |
//----- (000000000002D2C3) ---------------------------------------------------- | |
char *qnap_sort_get_locale_of_display_language() | |
{ | |
__uid_t v0; // eax | |
char s2[8]; // [rsp+0h] [rbp-30h] BYREF | |
__int64 v3; // [rsp+8h] [rbp-28h] | |
__int64 v4; // [rsp+10h] [rbp-20h] | |
__int64 v5; // [rsp+18h] [rbp-18h] | |
unsigned int i; // [rsp+2Ch] [rbp-4h] | |
*(_QWORD *)s2 = 0LL; | |
v3 = 0LL; | |
v4 = 0LL; | |
v5 = 0LL; | |
i = 0; | |
if ( (unsigned int)sub_2D1DB("nas_lang=", s2, 32) ) | |
{ | |
v0 = getuid(); | |
if ( (unsigned int)sub_2CF9D(v0, s2, 32) ) | |
return off_237288; | |
} | |
for ( i = 0; i <= 0x16; ++i ) | |
{ | |
if ( !strcmp((&off_237280)[2 * (int)i], s2) ) | |
return (&off_237280)[2 * (int)i + 1]; | |
} | |
return off_237288; | |
} | |
// 237280: using guessed type char *off_237280; | |
// 237288: using guessed type char *off_237288; | |
//----- (000000000002D397) ---------------------------------------------------- | |
void __fastcall qnap_sort_close(__int64 a1) | |
{ | |
if ( a1 ) | |
sub_2D13D(a1); | |
} | |
//----- (000000000002D3BA) ---------------------------------------------------- | |
void *__fastcall qnap_sort_open(const char *a1) | |
{ | |
__int64 v2; // rax | |
const char *v3; // [rsp+8h] [rbp-18h] | |
int v4; // [rsp+14h] [rbp-Ch] BYREF | |
void *v5; // [rsp+18h] [rbp-8h] | |
v3 = a1; | |
v4 = 0; | |
v5 = calloc(1uLL, 0x48uLL); | |
if ( !v5 ) | |
return 0LL; | |
if ( !a1 ) | |
v3 = "en_US"; | |
*(_QWORD *)v5 = dlopen("/mnt/ext/opt/samba/lib/libicudata.so", 1); | |
if ( !*(_QWORD *)v5 ) | |
goto LABEL_15; | |
*((_QWORD *)v5 + 1) = dlopen("/mnt/ext/opt/samba/lib/libicuuc.so", 1); | |
if ( !*((_QWORD *)v5 + 1) ) | |
goto LABEL_15; | |
*((_QWORD *)v5 + 2) = dlopen("/mnt/ext/opt/samba/lib/libicui18n.so", 1); | |
if ( !*((_QWORD *)v5 + 2) ) | |
goto LABEL_15; | |
*((_QWORD *)v5 + 3) = dlsym(*((void **)v5 + 2), "ucol_open_68"); | |
if ( *((_QWORD *)v5 + 3) | |
&& (*((_QWORD *)v5 + 4) = dlsym(*((void **)v5 + 2), "ucol_setStrength_68")) != 0LL | |
&& (*((_QWORD *)v5 + 5) = dlsym(*((void **)v5 + 2), "ucol_strcollUTF8_68")) != 0LL | |
&& (*((_QWORD *)v5 + 6) = dlsym(*((void **)v5 + 2), "ucol_setAttribute_68")) != 0LL | |
&& (*((_QWORD *)v5 + 7) = dlsym(*((void **)v5 + 2), "ucol_close_68")) != 0LL | |
&& (v2 = (*((__int64 (__fastcall **)(const char *, int *))v5 + 3))(v3, &v4), (*((_QWORD *)v5 + 8) = v2) != 0LL) ) | |
{ | |
(*((void (__fastcall **)(_QWORD, _QWORD))v5 + 4))(*((_QWORD *)v5 + 8), 0LL); | |
(*((void (__fastcall **)(_QWORD, __int64, __int64, int *))v5 + 6))(*((_QWORD *)v5 + 8), 7LL, 17LL, &v4); | |
(*((void (__fastcall **)(_QWORD, __int64, __int64, int *))v5 + 6))(*((_QWORD *)v5 + 8), 4LL, 17LL, &v4); | |
(*((void (__fastcall **)(_QWORD, __int64, __int64, int *))v5 + 6))(*((_QWORD *)v5 + 8), 5LL, 2LL, &v4); | |
(*((void (__fastcall **)(_QWORD, __int64, __int64, int *))v5 + 6))(*((_QWORD *)v5 + 8), 1LL, 20LL, &v4); | |
return v5; | |
} | |
else | |
{ | |
LABEL_15: | |
sub_2D13D((__int64)v5); | |
return 0LL; | |
} | |
} | |
//----- (000000000002D68B) ---------------------------------------------------- | |
__int64 __fastcall qnap_sort_compare(__int64 a1, char *a2, char *a3, int a4) | |
{ | |
unsigned int v6; // [rsp+2Ch] [rbp-4h] | |
v6 = sub_2CEE9(a1, a2, a3); | |
if ( a4 == 1 ) | |
return -v6; | |
return v6; | |
} | |
//----- (000000000002D6D9) ---------------------------------------------------- | |
__int64 __fastcall qnap_scandir(const char *a1, char **a2, unsigned int a3) | |
{ | |
__int64 locale_of_display_language; // rax | |
__int64 dest; // [rsp+20h] [rbp-40h] BYREF | |
struct dirent64 **namelist; // [rsp+28h] [rbp-38h] BYREF | |
int v8; // [rsp+34h] [rbp-2Ch] | |
__int64 v9; // [rsp+38h] [rbp-28h] | |
int v10; // [rsp+44h] [rbp-1Ch] | |
char *v11; // [rsp+48h] [rbp-18h] | |
int v12; // [rsp+50h] [rbp-10h] | |
int j; // [rsp+54h] [rbp-Ch] | |
int i; // [rsp+58h] [rbp-8h] | |
int k; // [rsp+5Ch] [rbp-4h] | |
namelist = 0LL; | |
v11 = 0LL; | |
v10 = 0; | |
k = 0; | |
if ( !a1 || !a2 ) | |
return 0xFFFFFFFFLL; | |
v10 = scandir64(a1, &namelist, 0LL, (int (*)(const struct dirent64 **, const struct dirent64 **))&alphasort64); | |
if ( v10 <= 0 ) | |
return (unsigned int)v10; | |
v11 = (char *)calloc(v10, 0x100uLL); | |
if ( v11 ) | |
{ | |
v9 = 0LL; | |
dest = 0LL; | |
i = 0; | |
j = 0; | |
v8 = 8; | |
if ( v10 > 1 ) | |
{ | |
locale_of_display_language = qnap_sort_get_locale_of_display_language(); | |
v9 = qnap_sort_open(locale_of_display_language); | |
for ( i = 0; v10 - 1 > i; ++i ) | |
{ | |
v12 = i; | |
for ( j = i + 1; j < v10; ++j ) | |
{ | |
if ( (int)qnap_sort_compare(v9, namelist[v12]->d_name, namelist[j]->d_name, a3) > 0 ) | |
v12 = j; | |
} | |
if ( i != v12 ) | |
{ | |
memcpy(&dest, &namelist[i], v8); | |
memcpy(&namelist[i], &namelist[v12], v8); | |
memcpy(&namelist[v12], &dest, v8); | |
} | |
} | |
qnap_sort_close(v9); | |
} | |
for ( k = 0; k < v10; ++k ) | |
snprintf(&v11[256 * (__int64)k], 0x100uLL, "%s", namelist[k]->d_name); | |
for ( k = 0; k < v10; ++k ) | |
free(namelist[k]); | |
free(namelist); | |
*a2 = v11; | |
return (unsigned int)v10; | |
} | |
else | |
{ | |
if ( v10 > 0 && namelist ) | |
{ | |
for ( k = 0; k < v10; ++k ) | |
free(namelist[k]); | |
free(namelist); | |
} | |
*a2 = 0LL; | |
return 0xFFFFFFFFLL; | |
} | |
} | |
// A580: using guessed type __int64 __fastcall qnap_sort_compare(_QWORD, _QWORD, _QWORD, _QWORD); | |
// A7E0: using guessed type __int64 __fastcall qnap_sort_open(_QWORD); | |
// A8A0: using guessed type __int64 qnap_sort_get_locale_of_display_language(void); | |
// AD80: using guessed type __int64 __fastcall qnap_sort_close(_QWORD); | |
//----- (000000000002D9E0) ---------------------------------------------------- | |
int __fastcall sub_2D9E0(char *filename, struct stat64 *stat_buf) | |
{ | |
return __xstat64(1, filename, stat_buf); | |
} | |
//----- (000000000002D9F0) ---------------------------------------------------- | |
int __fastcall sub_2D9F0(char *filename, struct stat64 *stat_buf) | |
{ | |
return __lxstat64(1, filename, stat_buf); | |
} | |
//----- (000000000002DA00) ---------------------------------------------------- | |
void (__fastcall *sub_2DA00())() | |
{ | |
void (__fastcall **v0)(); // rbx | |
void (__fastcall *result)(); // rax | |
v0 = (void (__fastcall **)())&off_235008; | |
result = (void (__fastcall *)())off_235008; | |
if ( off_235008 != (__int64 (__fastcall *)())-1LL ) | |
{ | |
do | |
{ | |
--v0; | |
result(); | |
result = *v0; | |
} | |
while ( *v0 != (void (__fastcall *)())-1LL ); | |
} | |
return result; | |
} | |
// 235008: using guessed type __int64 (__fastcall *off_235008)(); | |
//----- (000000000002DA38) ---------------------------------------------------- | |
void term_proc() | |
{ | |
sub_AE30(); | |
} | |
// nfuncs=944 queued=475 decompiled=475 lumina nreq=0 worse=0 better=0 | |
// ALL OK, 475 function(s) have been successfully decompiled |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment