Audit software refers to computer programs used by the auditor as part of the audit procedures to process data of audit significance contained in a client’s information systems.
Unlike "utility programs" (which are general tools like Excel or basic database managers), specialized audit software is designed to read, process, and interrogate large volumes of computer files. It acts as an independent tool for the auditor to extract and analyze data without relying solely on the client’s reports.
There are generally two categories of audit software:
According to BGF 2.14.2, an Expression of Concern should be utilized under specific circumstances where immediate retraction is not possible or appropriate. The primary criteria include:
The BFG 2.14.2 release focuses on enhancing the tool's usability, performance, and compatibility with the latest Git versions. Some key changes include:
The logic brick system was a hallmark of the original BGE. In bgf 2.14.2, the Python API has been extended to allow:
This update makes it easier to script complex behaviors without abandoning the visual logic brick workflow.
function read_bgf(file_handle): magic = read_bytes(4) if magic != "BGF ": error("Invalid magic")major = read_uint8() minor = read_uint8() patch = read_uint8() if (major, minor, patch) != (2, 14, 2): warn("Unexpected version") endian = read_uint8() set_endianness(endian) header_size = read_uint32() total_size = read_uint64() header_crc = read_uint32() // Validate header checksum go_to(0) header_bytes = read_bytes(header_size) if crc32(header_bytes) != header_crc: error("Header corruption") section_count = read_uint32() section_table_ptr = read_uint64() sections = [] for i in 0 to section_count-1: go_to(section_table_ptr + i*32) sec = Section() sec.type = read_uint32() sec.flags = read_uint32() sec.data_offset = read_uint64() sec.comp_size = read_uint64() sec.decomp_size = read_uint64() sections.append(sec) // Process each section for sec in sections: go_to(sec.data_offset) raw = read_bytes(sec.comp_size) if sec.flags & 0x01: // Zlib compression raw = zlib_decompress(raw, sec.decomp_size) if sec.flags & 0x02: // XOR obfuscation (key 0xA3) for j in 0 to len(raw)-1: raw[j] ^= 0xA3 // Also rotate key: key = ((key << 1) | (key >> 7)) & 0xFF handle_section(sec.type, raw)