|
|
|
@ -361,6 +361,7 @@ static void targetinfo(struct cli_target_info *info, unsigned int target, fmap_t |
|
|
|
|
|
|
|
|
|
memset(info, 0, sizeof(struct cli_target_info)); |
|
|
|
|
info->fsize = map->len; |
|
|
|
|
cli_hashset_init_noalloc(&info->exeinfo.vinfo); |
|
|
|
|
|
|
|
|
|
if(target == 1) |
|
|
|
|
einfo = cli_peheader; |
|
|
|
@ -612,6 +613,7 @@ int cli_fmap_scandesc(cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli |
|
|
|
|
if((ret = cli_ac_initdata(&gdata, groot->ac_partsigs, groot->ac_lsigs, groot->ac_reloff_num, CLI_DEFAULT_AC_TRACKLEN)) || (ret = cli_ac_caloff(groot, &gdata, &info))) { |
|
|
|
|
if(info.exeinfo.section) |
|
|
|
|
free(info.exeinfo.section); |
|
|
|
|
cli_hashset_destroy(&info.exeinfo.vinfo); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -621,6 +623,7 @@ int cli_fmap_scandesc(cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli |
|
|
|
|
cli_ac_freedata(&gdata); |
|
|
|
|
if(info.exeinfo.section) |
|
|
|
|
free(info.exeinfo.section); |
|
|
|
|
cli_hashset_destroy(&info.exeinfo.vinfo); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
if(troot->bm_offmode) { |
|
|
|
@ -631,6 +634,7 @@ int cli_fmap_scandesc(cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli |
|
|
|
|
cli_ac_freedata(&tdata); |
|
|
|
|
if(info.exeinfo.section) |
|
|
|
|
free(info.exeinfo.section); |
|
|
|
|
cli_hashset_destroy(&info.exeinfo.vinfo); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
bm_offmode = 1; |
|
|
|
@ -659,6 +663,7 @@ int cli_fmap_scandesc(cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli |
|
|
|
|
cli_bm_freeoff(&toff); |
|
|
|
|
if(info.exeinfo.section) |
|
|
|
|
free(info.exeinfo.section); |
|
|
|
|
cli_hashset_destroy(&info.exeinfo.vinfo); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -675,6 +680,7 @@ int cli_fmap_scandesc(cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli |
|
|
|
|
} |
|
|
|
|
if(info.exeinfo.section) |
|
|
|
|
free(info.exeinfo.section); |
|
|
|
|
cli_hashset_destroy(&info.exeinfo.vinfo); |
|
|
|
|
return ret; |
|
|
|
|
} else if((acmode & AC_SCAN_FT) && ret >= CL_TYPENO) { |
|
|
|
|
if(ret > type) |
|
|
|
@ -704,6 +710,7 @@ int cli_fmap_scandesc(cli_ctx *ctx, cli_file_t ftype, uint8_t ftonly, struct cli |
|
|
|
|
|
|
|
|
|
if(info.exeinfo.section) |
|
|
|
|
free(info.exeinfo.section); |
|
|
|
|
cli_hashset_destroy(&info.exeinfo.vinfo); |
|
|
|
|
|
|
|
|
|
if(ret == CL_VIRUS) |
|
|
|
|
return CL_VIRUS; |
|
|
|
|